{"name":"","modelID":"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy","exports":[],"contents":{"team_games":{"type":"sql_select","selectStr":"\n  WITH sides AS (\n    SELECT Id AS game_id, Season AS season, \"Week\" AS week_number, SeasonType AS season_type,\n      StartDate AS start_date, Completed AS completed, ConferenceGame AS conference_game,\n      TRUE AS is_home, HomeTeam AS team, HomeConference AS conference, HomeClassification AS classification,\n      AwayTeam AS opponent, AwayConference AS opponent_conference, AwayClassification AS opponent_classification,\n      HomePoints AS points_for, AwayPoints AS points_against,\n      HomePregameElo AS pregame_elo, HomePostgameElo AS postgame_elo, AwayPregameElo AS opponent_pregame_elo\n    FROM cfb_games\n    UNION ALL\n    SELECT Id, Season, \"Week\", SeasonType,\n      StartDate, Completed, ConferenceGame,\n      FALSE, AwayTeam, AwayConference, AwayClassification,\n      HomeTeam, HomeConference, HomeClassification,\n      AwayPoints, HomePoints,\n      AwayPregameElo, AwayPostgameElo, HomePregameElo\n    FROM cfb_games\n  )\n  SELECT *,\n    CAST(game_id AS VARCHAR) || '|' || team AS team_game_id,\n    -- the team's most recent game that carries a postgame Elo, so a\n    -- ranking can show where the rating stands now\n    postgame_elo IS NOT NULL\n      AND row_number() OVER (\n        PARTITION BY team, season, postgame_elo IS NULL ORDER BY start_date DESC\n      ) = 1 AS is_latest_rated_game\n  FROM sides\n","name":"sql://duckdb/a322d13b-ede6-5975-b3f3-b897e2cccf63","as":"team_games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":24,"character":8},"end":{"line":82,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per team per game in the 2025 and 2026 seasons: every game appears twice, once\nfrom each team's side, with points for and against, the team's and opponent's conference\nand division, and pregame and postgame Elo. Joins the drives the team ran and the drives it\ndefended, so a team's record, scoring margin and drive efficiency on both sides of the ball\ncome from one source. Use it for team rankings, records and strength of schedule.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":17,"character":0},"end":{"line":23,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) One row per team per game: every game appears twice, once from the home team's side and once from the away team's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":43,"character":0},"end":{"line":43,"character":122}}}}]}},"fields":[{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"week_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"start_date","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["start_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_home","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_home"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_for","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_against","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"postgame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team_game_id","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team_game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_latest_rated_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":37,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}]},"expressionType":"scalar","code":"season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":36,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":42,"character":47}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":11},"end":{"line":42,"character":47}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when season_type = 'postseason'\n      else concat('Week ', week_number::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16, or Postseason.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":81}}}}]}},{"name":"is_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}]},"expressionType":"scalar","code":"completed and points_for > points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team won it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":60}}}}]}},{"name":"is_loss","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":56}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}]},"expressionType":"scalar","code":"completed and points_for < points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team lost it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":61}}}}]}},{"name":"scoring_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":51,"character":49}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}]},"expressionType":"scalar","code":"points_for - points_against","annotations":{"notes":[{"text":"#(doc) This team's points minus its opponent's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":52}}}}]}},{"name":"games_played","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":56,"character":48}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":20},"end":{"line":56,"character":27}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"expressionType":"aggregate","code":"count() { where: completed }","annotations":{"notes":[{"text":"#(doc) Number of completed games played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":45}}}}]}},{"name":"wins","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":59,"character":37}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":12},"end":{"line":59,"character":19}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"expressionType":"aggregate","code":"count() { where: is_win }","annotations":{"notes":[{"text":"#(doc) Games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":22}}}}]}},{"name":"losses","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":62,"character":40}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":14},"end":{"line":62,"character":21}}}},"filterList":[{"node":"filterCondition","code":"is_loss","e":{"node":"field","path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"expressionType":"aggregate","code":"count() { where: is_loss }","annotations":{"notes":[{"text":"#(doc) Games lost.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":23}}}}]}},{"name":"win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":83}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":16},"end":{"line":66,"character":23}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":51},"end":{"line":66,"character":58}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":44},"end":{"line":66,"character":83}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_win } / nullif(count() { where: completed }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":41}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":14}}}}]}},{"name":"points_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":69,"character":59}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":23},"end":{"line":69,"character":38}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"expressionType":"aggregate","code":"avg(points_for) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points scored per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":53}}}}]}},{"name":"points_allowed_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":72,"character":71}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":31},"end":{"line":72,"character":50}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"expressionType":"aggregate","code":"avg(points_against) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points allowed per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":54}}}}]}},{"name":"avg_scoring_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":75,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":26},"end":{"line":75,"character":45}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"expressionType":"aggregate","code":"avg(scoring_margin) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average scoring margin per completed game. Positive means the team outscores its opponents.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":103}}}}]}},{"name":"current_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":78,"character":68}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":19},"end":{"line":78,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_latest_rated_game","e":{"node":"field","path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"expressionType":"aggregate","code":"max(postgame_elo) { where: is_latest_rated_game }","annotations":{"notes":[{"text":"#(doc) The team's Elo rating after its most recent rated game: where the rating stands now. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":141}}}}]}},{"name":"strength_of_schedule","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":28},"end":{"line":81,"character":53}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"expressionType":"aggregate","code":"avg(opponent_pregame_elo) { where: completed }","annotations":{"notes":[{"text":"#(doc) Strength of schedule: the average pregame Elo rating of the opponents played. Higher means a tougher schedule.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":122}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-1d6fe2e2-21b0-4a26-8b95-e6d79c72bbfb","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-1d6fe2e2-21b0-4a26-8b95-e6d79c72bbfb","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-d670c138-a16d-4ffa-98b0-020f56ab6470","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":13},"end":{"line":29,"character":111}}},"parameters":{},"as":"offense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team ran on offense in this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":28,"character":2},"end":{"line":28,"character":59}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},"right":{"node":"field","path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},"right":{"node":"field","path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},{"path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},{"path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-1d6fe2e2-21b0-4a26-8b95-e6d79c72bbfb","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-1d6fe2e2-21b0-4a26-8b95-e6d79c72bbfb","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-d670c138-a16d-4ffa-98b0-020f56ab6470","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":111}}},"parameters":{},"as":"defense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team defended in this game — its opponent's possessions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":82}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},"right":{"node":"field","path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},"right":{"node":"field","path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},{"path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},{"path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"team_game_id","dialect":"duckdb","persistent":false,"extends":"team_games_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","sourceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy"},"games":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_games","dialect":"duckdb","tablePath":"cfb_games","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Week","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"SeasonType","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartDate","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartTimeTBD","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"NeutralSite","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ConferenceGame","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"VenueId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ExcitementIndex","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Highlights","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Competition","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Format","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff RoundName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BracketSlot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BowlName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"calc_periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":96}}},"e":{"node":"+","kids":{"left":{"node":"-","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"pattern","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"replacement","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}}}},"name":"replace","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"node":"stringLiteral","literal":","},{"node":"stringLiteral","literal":""}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"length(HomeLineScores) - length(replace(HomeLineScores, ',', '')) + 1"},{"name":"calc_home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":46,"character":4},"end":{"line":50,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when HomeLineScores is null\n      else coalesce(split_part!string(HomeLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 3):::number, 0)"},{"name":"calc_away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":52,"character":4},"end":{"line":56,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when AwayLineScores is null\n      else coalesce(split_part!string(AwayLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 3):::number, 0)"}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":8},"end":{"line":28,"character":46}}},"parameters":{},"as":"games_raw","annotations":{"blockNotes":[{"text":"#(doc) Every game of every season in the feed, one row per game, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":27,"character":0},"end":{"line":27,"character":95}}}}]},"arguments":{}},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]},"expandedFieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":23},"end":{"line":57,"character":18}}},"givenUsage":[]},"name":"QuerySource-fe4242c0-7eb0-41b2-8085-7a9a6e1c1214","as":"games_lines","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":8},"end":{"line":57,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with the line score parsed: periods played and each team's points through three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":41,"character":0},"end":{"line":41,"character":103}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":90}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}}},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three - calc_away_points_after_three"},{"name":"calc_is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":98}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n      or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":86}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"35"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"28.0"}}}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"35 * greatest(0, 1 - abs(HomePoints - AwayPoints) / 28.0)"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":112}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"20"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"17.0"}}}}}]},"expressionType":"scalar"}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"coalesce(20 * greatest(0, 1 - abs(calc_home_points_after_three - calc_away_points_after_three) / 17.0), 0)"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":73,"character":4},"end":{"line":77,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}}}}}}}}],"caseThen":[{"node":"numberLiteral","literal":"10"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}]},"expressionType":"scalar","code":"pick 10 when\n        (HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n        or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)\n      else 0"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":71}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"15"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}}]},"expressionType":"scalar","code":"pick 15 when calc_periods_played > 4 else 0"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"12"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}}}}},"right":{"node":"numberLiteral","literal":"80.0"}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"12 * least(1, (HomePoints + AwayPoints) / 80.0)"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":83,"character":4},"end":{"line":87,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}}}}}}}}],"caseThen":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"10"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"250.0"}}}]},"expressionType":"scalar"}}}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expressionType":"scalar","code":"pick 10 * least(1, abs(HomePregameElo - AwayPregameElo) / 250.0) when\n        (HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n        or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)\n      else 0"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":4},"end":{"line":89,"character":78}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}}],"caseThen":[{"node":"numberLiteral","literal":"8"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}]},"expressionType":"scalar","code":"pick 8 when `Playoff Competition` is not null else 0"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_lines@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expandedFieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":30},"end":{"line":90,"character":18}}},"givenUsage":[]},"name":"QuerySource-55364bd1-5c2d-4c5c-a9b1-b32fdcf75a60","as":"games_thrill_parts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":8},"end":{"line":90,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with each part of the thrill index as its own column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":59,"character":0},"end":{"line":59,"character":67}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":95,"character":4},"end":{"line":100,"character":8}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"not","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}}},"right":{"node":"is-null","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}}}}},"right":{"node":"is-null","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND((",")::NUMERIC)"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}}}},"name":"round","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"100"},{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},"right":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}}}},"right":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}}}},"right":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}}}},"right":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}}}},"right":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}}}},"right":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}}}}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when not Completed or HomePoints is null or AwayPoints is null\n      else round(least(100,\n        calc_thrill_closeness + calc_thrill_late_drama + calc_thrill_comeback + calc_thrill_overtime\n        + calc_thrill_scoring + calc_thrill_upset + calc_thrill_stakes\n      ))"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_thrill_parts@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expandedFieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":93,"character":24},"end":{"line":101,"character":18}}},"givenUsage":[]},"name":"QuerySource-32030372-2367-4891-8bcb-c5da0137bccf","as":"games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":29,"character":8},"end":{"line":53,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per college football game in the 2025 and 2026 seasons, with every drive of that\ngame joined in. Carries the final score, line score, venue, conferences, Elo, CFBD's\nexcitement rating and a box-score thrill index, plus drive-level totals. Use it for\nschedules, results, the most exciting games, and game summaries.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":23,"character":0},"end":{"line":28,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per college football game in the 2025 and 2026 seasons, across every division: FBS, FCS, Division II\nand Division III. Each game carries the final score, venue and announced attendance,\nthe conference and division of both teams, pregame and postgame Elo ratings, postgame\nwin probability, an excitement rating, and College Football Playoff bracket details\nfor playoff games. Use it for schedules, results, margins, attendance, rankings-style\nElo movement, and as the game-level context for drive-by-drive data, which joins on\ngame id.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":103,"character":0},"end":{"line":111,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) Games with the thrill index itself as a column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":92,"character":0},"end":{"line":92,"character":55}}}}]}}},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Announced attendance for the game, in people. Missing for many games, especially at the Division II and Division III level.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":144,"character":4},"end":{"line":144,"character":135}}}}],"blockNotes":[]}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":191,"character":4},"end":{"line":191,"character":13}}}},{"text":"#(doc) Division the away team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":192,"character":4},"end":{"line":192,"character":102}}}}],"blockNotes":[]}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":195,"character":4},"end":{"line":195,"character":13}}}},{"text":"#(doc) Conference the away team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":196,"character":4},"end":{"line":196,"character":148}}}}],"blockNotes":[]}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":184,"character":4},"end":{"line":184,"character":47}}}}],"blockNotes":[]}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the away team scored in each period, as a comma-separated list in order, for example 3,7,7,0 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":134}}}}],"blockNotes":[]}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the away team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":89}}}}],"blockNotes":[]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":99}}}}],"blockNotes":[]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the away team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the home value to sum to 1 and is not the result itself.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":194}}}}],"blockNotes":[]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":106}}}}],"blockNotes":[]}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":187,"character":4},"end":{"line":187,"character":13}}}},{"text":"#(doc) Name of the away team, for example Michigan or Texas.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":188,"character":4},"end":{"line":188,"character":65}}}}],"blockNotes":[]}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game has been played and the final score is official.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":135,"character":4},"end":{"line":135,"character":79}}}}],"blockNotes":[]}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when both teams belong to the same conference, so the result counts in the conference standings.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":141,"character":4},"end":{"line":141,"character":113}}}}],"blockNotes":[]}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Excitement rating for the game, built from how much and how often the win probability swung. Typical games rate near 4; the wildest finishes rate above 8.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":214,"character":4},"end":{"line":214,"character":166}}}}],"blockNotes":[]}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Link to the game's video highlights, when one is published.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":217,"character":4},"end":{"line":217,"character":71}}}}],"blockNotes":[]}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":161,"character":4},"end":{"line":161,"character":13}}}},{"text":"#(doc) Division the home team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":102}}}}],"blockNotes":[]}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":13}}}},{"text":"#(doc) Conference the home team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":166,"character":4},"end":{"line":166,"character":148}}}}],"blockNotes":[]}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":154,"character":4},"end":{"line":154,"character":47}}}}],"blockNotes":[]}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the home team scored in each period, as a comma-separated list in order, for example 7,10,0,14 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":172,"character":4},"end":{"line":172,"character":136}}}}],"blockNotes":[]}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the home team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":169,"character":4},"end":{"line":169,"character":89}}}}],"blockNotes":[]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":181,"character":4},"end":{"line":181,"character":99}}}}],"blockNotes":[]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the home team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the away value to sum to 1 and is not the result itself — a team can lose a game it was 90% likely to win. Matches the actual winner in about 90% of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":175,"character":4},"end":{"line":175,"character":293}}}}],"blockNotes":[]}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":178,"character":4},"end":{"line":178,"character":106}}}}],"blockNotes":[]}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":157,"character":4},"end":{"line":157,"character":13}}}},{"text":"#(doc) Name of the home team, for example Alabama or Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":158,"character":4},"end":{"line":158,"character":69}}}}],"blockNotes":[]}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the game. Join key to the drives data, whose GameId column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":116,"character":4},"end":{"line":116,"character":114}}}}],"blockNotes":[]}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game was played at a neutral venue rather than either team's own stadium. Bowl games, playoff games and kickoff classics are typically neutral site.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":138,"character":4},"end":{"line":138,"character":174}}}}],"blockNotes":[]}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Free-text note about the game, usually the name of a kickoff event or a special circumstance, for example Aer Lingus College Football Classic.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":220,"character":4},"end":{"line":220,"character":154}}}}],"blockNotes":[]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the away team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":244,"character":4},"end":{"line":244,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":247,"character":4},"end":{"line":247,"character":13}}}},{"text":"#(doc) Bowl the playoff game was hosted by, for example Rose Bowl, Sugar Bowl or College Football Playoff National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":248,"character":4},"end":{"line":248,"character":133}}}}],"blockNotes":[]}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Slot the game occupies in the playoff bracket, for example QF1 for the first quarterfinal or CH for the championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":238,"character":4},"end":{"line":238,"character":129}}}}],"blockNotes":[]}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":223,"character":4},"end":{"line":223,"character":13}}}},{"text":"#(doc) Postseason competition the game belongs to. cfp for the College Football Playoff; missing for regular-season and ordinary bowl games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":224,"character":4},"end":{"line":224,"character":145}}}}],"blockNotes":[]}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff bracket format in force for the season, for example twelve_team_2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":227,"character":4},"end":{"line":227,"character":89}}}}],"blockNotes":[]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the home team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":241,"character":4},"end":{"line":241,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":230,"character":4},"end":{"line":230,"character":13}}}},{"text":"#(doc) Playoff round in machine form: first_round, quarterfinal, semifinal or championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":231,"character":4},"end":{"line":231,"character":96}}}}],"blockNotes":[]}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":234,"character":4},"end":{"line":234,"character":13}}}},{"text":"#(doc) Playoff round in readable form: First Round, Quarterfinal, Semifinal or National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":235,"character":4},"end":{"line":235,"character":106}}}}],"blockNotes":[]}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Season year the game belongs to: 2025 or 2026. A season's bowls and playoff games played in January still belong to the season that started in August.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":119,"character":4},"end":{"line":119,"character":162}}}}],"blockNotes":[]}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":13}}}},{"text":"#(doc) Portion of the season: regular for the regular season, postseason for bowls and College Football Playoff games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":126,"character":4},"end":{"line":126,"character":123}}}}],"blockNotes":[]}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Scheduled kickoff date and time, expressed in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":129,"character":4},"end":{"line":129,"character":80}}}}],"blockNotes":[]}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the kickoff time had not been announced yet, so only the date is meaningful.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":132,"character":4},"end":{"line":132,"character":98}}}}],"blockNotes":[]}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":150,"character":4},"end":{"line":150,"character":13}}}},{"text":"#(doc) Name of the stadium the game was played in, for example Bryant-Denny Stadium.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":151,"character":4},"end":{"line":151,"character":89}}}}],"blockNotes":[]}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the stadium the game was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":68}}}}],"blockNotes":[]}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Week of the season the game was played in, numbered within the season type. Regular-season weeks run 1 to 16; postseason bowl and playoff games carry their own week numbers.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":185}}}}],"blockNotes":[]}},{"name":"game_date","type":"date","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":259,"character":32}}},"e":{"node":"cast","dstType":{"type":"date"},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}},"safe":false,"srcType":{"type":"timestamp"}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}}]},"expressionType":"scalar","code":"StartDate::date","annotations":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}},{"name":"matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":262,"character":49}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"node":"stringLiteral","literal":" at "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":15},"end":{"line":262,"character":49}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(AwayTeam, ' at ', HomeTeam)","annotations":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}},{"name":"final_score","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":267,"character":93}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":11},"end":{"line":266,"character":93}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":11},"end":{"line":267,"character":93}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick concat(HomeTeam, ' ', HomePoints::string, ', ', AwayTeam, ' ', AwayPoints::string) when HomePoints >= AwayPoints\n      else concat(AwayTeam, ' ', AwayPoints::string, ', ', HomeTeam, ' ', HomePoints::string)","annotations":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}},{"name":"winner","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":273,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePoints > AwayPoints\n      pick AwayTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}},{"name":"loser","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":279,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}}}],"caseThen":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}]},"expressionType":"scalar","code":"pick AwayTeam when HomePoints > AwayPoints\n      pick HomeTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that lost the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":92}}}}]}},{"name":"home_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":282,"character":39}}},"e":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}]},"expressionType":"scalar","code":"HomePoints > AwayPoints","annotations":{"notes":[{"text":"#(doc) True when the home team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":40}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":285,"character":43}}},"e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints + AwayPoints","annotations":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}},{"name":"point_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":288,"character":43}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints - AwayPoints","annotations":{"notes":[{"text":"#(doc) Home points minus away points. Positive when the home team won, negative when the away team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":108}}}}]}},{"name":"victory_margin","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":291,"character":50}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":22},"end":{"line":291,"character":50}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(HomePoints - AwayPoints)","annotations":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}},{"name":"margin_bucket","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":298,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"8"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"16"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"27"}}}],"caseThen":[{"node":"stringLiteral","literal":"One-score game"},{"node":"stringLiteral","literal":"Two-score game"},{"node":"stringLiteral","literal":"Comfortable"}],"caseElse":{"node":"stringLiteral","literal":"Blowout"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":33},"end":{"line":295,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":33},"end":{"line":296,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":30},"end":{"line":297,"character":58}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'One-score game' when abs(HomePoints - AwayPoints) <= 8\n      pick 'Two-score game' when abs(HomePoints - AwayPoints) <= 16\n      pick 'Comfortable' when abs(HomePoints - AwayPoints) <= 27\n      else 'Blowout'","annotations":{"notes":[{"text":"#(doc) How close the game was: One-score game for a margin of 8 or less, Two-score game for 9 to 16, Comfortable for 17 to 27, and Blowout for 28 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":159}}}}]}},{"name":"classification_matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":301,"character":84}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"node":"stringLiteral","literal":" vs "},{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":30},"end":{"line":301,"character":84}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(HomeClassification, ' vs ', AwayClassification)","annotations":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}},{"name":"is_fbs_matchup","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":304,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},"right":{"node":"stringLiteral","literal":"fbs"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}},"right":{"node":"stringLiteral","literal":"fbs"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}}]},"expressionType":"scalar","code":"HomeClassification = 'fbs' and AwayClassification = 'fbs'","annotations":{"notes":[{"text":"#(doc) True when both teams are FBS programs, the top division of college football.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":303,"character":88}}}}]}},{"name":"is_playoff_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":307,"character":56}}},"e":{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}]},"expressionType":"scalar","code":"`Playoff Competition` is not null","annotations":{"notes":[{"text":"#(doc) True when the game is part of the College Football Playoff bracket.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":306,"character":79}}}}]}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":310,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}]},"expressionType":"scalar","code":"HomePregameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}},{"name":"elo_favorite","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":316,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePregameElo > AwayPregameElo\n      pick AwayTeam when AwayPregameElo > HomePregameElo\n      else null","annotations":{"notes":[{"text":"#(doc) Team the pregame Elo ratings favored, before any home-field adjustment.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":312,"character":83}}}}]}},{"name":"is_elo_upset","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":321,"character":70}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n      or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)","annotations":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}},{"name":"home_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":324,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}]},"expressionType":"scalar","code":"HomePostgameElo - HomePregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the home team gained from the game. Negative when the home team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":323,"character":109}}}}]}},{"name":"away_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":327,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}]},"expressionType":"scalar","code":"AwayPostgameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the away team gained from the game. Negative when the away team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":326,"character":109}}}}]}},{"name":"excitement_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":334,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},"right":{"node":"numberLiteral","literal":"8"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Competitive"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}}]},"expressionType":"scalar","code":"pick 'Instant classic' when ExcitementIndex > 8\n      pick 'Thriller' when ExcitementIndex > 6\n      pick 'Competitive' when ExcitementIndex > 4\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) How dramatic the game was, from its excitement rating: Instant classic above 8, Thriller above 6, Competitive above 4, and Routine at 4 or below.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":329,"character":157}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":340,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}}]},"expressionType":"scalar","code":"Season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":339,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":347,"character":42}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when SeasonType = 'postseason'\n      else concat('Week ', `Week`::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}},{"name":"week_sort","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":352,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"numberLiteral","literal":"100"}],"caseElse":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}]},"expressionType":"scalar","code":"pick 100 when SeasonType = 'postseason'\n      else `Week`","annotations":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}},{"name":"periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":363,"character":41}}},"e":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_periods_played","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}}]},"expressionType":"scalar","code":"calc_periods_played","annotations":{"notes":[{"text":"#(doc) Number of periods the game went, from the line score: 4 for regulation, 5 or more when it went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":362,"character":119}}}}]}},{"name":"is_overtime","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":366,"character":42}}},"e":{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},"right":{"node":"numberLiteral","literal":"4"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}}]},"expressionType":"scalar","code":"calc_periods_played > 4","annotations":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}},{"name":"home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":369,"character":59}}},"e":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_home_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three","annotations":{"notes":[{"text":"#(doc) Home team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":75}}}}]}},{"name":"away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":372,"character":59}}},"e":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_away_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}}]},"expressionType":"scalar","code":"calc_away_points_after_three","annotations":{"notes":[{"text":"#(doc) Away team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":371,"character":75}}}}]}},{"name":"margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":375,"character":49}}},"e":{"node":"field","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}},"drillExpression":{"kind":"field_reference","name":"calc_margin_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}}]},"expressionType":"scalar","code":"calc_margin_after_three","annotations":{"notes":[{"text":"#(doc) Home points minus away points going into the fourth quarter. Positive when the home team led.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":374,"character":105}}}}]}},{"name":"is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":378,"character":43}}},"e":{"node":"field","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_is_comeback_win","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}}]},"expressionType":"scalar","code":"calc_is_comeback_win","annotations":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}},{"name":"thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":400,"character":45}}},"e":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_closeness","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}}]},"expressionType":"scalar","code":"calc_thrill_closeness","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}},{"name":"thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":403,"character":47}}},"e":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_late_drama","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}}]},"expressionType":"scalar","code":"calc_thrill_late_drama","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}},{"name":"thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":406,"character":43}}},"e":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_comeback","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_comeback","annotations":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}},{"name":"thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":409,"character":43}}},"e":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_overtime","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_overtime","annotations":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}},{"name":"thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":412,"character":41}}},"e":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_scoring","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}}]},"expressionType":"scalar","code":"calc_thrill_scoring","annotations":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}},{"name":"thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":415,"character":37}}},"e":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_upset","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_upset","annotations":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}},{"name":"thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":418,"character":39}}},"e":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_stakes","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}}]},"expressionType":"scalar","code":"calc_thrill_stakes","annotations":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}},{"name":"thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":427,"character":37}}},"e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_index","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_index","annotations":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}},{"name":"thrill_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":435,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},"right":{"node":"numberLiteral","literal":"75"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},"right":{"node":"numberLiteral","literal":"55"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}},"right":{"node":"numberLiteral","literal":"35"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Good game"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}}]},"expressionType":"scalar","code":"pick null when calc_thrill_index is null\n      pick 'Instant classic' when calc_thrill_index >= 75\n      pick 'Thriller' when calc_thrill_index >= 55\n      pick 'Good game' when calc_thrill_index >= 35\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":25}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":441,"character":18},"end":{"line":441,"character":25}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}},{"name":"completed_game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":444,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":28},"end":{"line":444,"character":35}}}},"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: Completed }","annotations":{"notes":[{"text":"#(doc) Number of games that have been played and have a final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":443,"character":73}}}}]}},{"name":"points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":447,"character":54}}},"e":{"node":"+","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":21},"end":{"line":447,"character":36}}}},"right":{"node":"aggregate","function":"sum","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":39},"end":{"line":447,"character":54}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(HomePoints) + sum(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Total points scored by both teams across all games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":446,"character":63}}}}]}},{"name":"avg_total_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":450,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":24},"end":{"line":450,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(total_points)","annotations":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}},{"name":"avg_home_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":453,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":23},"end":{"line":453,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":452,"character":51}}}}]}},{"name":"avg_away_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":456,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":23},"end":{"line":456,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":455,"character":51}}}}]}},{"name":"avg_victory_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":459,"character":45}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":26},"end":{"line":459,"character":45}}}},"refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"avg(victory_margin)","annotations":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}},{"name":"home_win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":463,"character":119}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":21},"end":{"line":463,"character":28}}}},"filterList":[{"node":"filterCondition","code":"home_win","e":{"node":"field","path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":58},"end":{"line":463,"character":65}}}},"filterList":[{"node":"filterCondition","code":"Completed and HomePoints != AwayPoints","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":51},"end":{"line":463,"character":119}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: home_win } / nullif(count() { where: Completed and HomePoints != AwayPoints }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}},{"name":"one_score_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":467,"character":99}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":27},"end":{"line":467,"character":34}}}},"filterList":[{"node":"filterCondition","code":"victory_margin <= 8","e":{"node":"<=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},"right":{"node":"numberLiteral","literal":"8"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},{"path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":68},"end":{"line":467,"character":99}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: victory_margin <= 8 } / nullif(completed_game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games decided by 8 points or fewer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":465,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":466,"character":4},"end":{"line":466,"character":14}}}}]}},{"name":"blowout_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":470,"character":60}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":21},"end":{"line":470,"character":28}}}},"filterList":[{"node":"filterCondition","code":"victory_margin >= 28","e":{"node":">=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}},"right":{"node":"numberLiteral","literal":"28"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: victory_margin >= 28 }","annotations":{"notes":[{"text":"#(doc) Number of games decided by 28 points or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":469,"character":57}}}}]}},{"name":"upset_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":473,"character":50}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":19},"end":{"line":473,"character":26}}}},"filterList":[{"node":"filterCondition","code":"is_elo_upset","e":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"expressionType":"aggregate","code":"count() { where: is_elo_upset }","annotations":{"notes":[{"text":"#(doc) Number of games in which the team with the lower pregame Elo rating won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":472,"character":84}}}}]}},{"name":"total_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":476,"character":39}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":24},"end":{"line":476,"character":39}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Attendance)","annotations":{"notes":[{"text":"#(doc) Total announced attendance across all games that reported it, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":475,"character":84}}}}]}},{"name":"avg_attendance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":479,"character":37}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":22},"end":{"line":479,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(Attendance)","annotations":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}},{"name":"max_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":482,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":22},"end":{"line":482,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}}]},"expressionType":"aggregate","code":"max(Attendance)","annotations":{"notes":[{"text":"#(doc) Largest announced attendance for a single game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":481,"character":70}}}}]}},{"name":"avg_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":485,"character":42}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":22},"end":{"line":485,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}},{"name":"max_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":488,"character":42}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":22},"end":{"line":488,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}}]},"expressionType":"aggregate","code":"max(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Highest excitement rating of any game in the group.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":487,"character":63}}}}]}},{"name":"avg_thrill_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(thrill_index)","annotations":{"notes":[{"text":"#(doc) Average thrill index across completed games, 0 to 100.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":66}}}}]}},{"name":"neutral_site_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":495,"character":79}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":25},"end":{"line":495,"character":32}}}},"filterList":[{"node":"filterCondition","code":"NeutralSite","e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":58},"end":{"line":495,"character":79}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: NeutralSite } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played at a neutral venue.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":53}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":494,"character":4},"end":{"line":494,"character":14}}}}]}},{"name":"conference_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":499,"character":85}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":28},"end":{"line":499,"character":35}}}},"filterList":[{"node":"filterCondition","code":"ConferenceGame","e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":64},"end":{"line":499,"character":85}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: ConferenceGame } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played between teams from the same conference.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":497,"character":73}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":498,"character":4},"end":{"line":498,"character":14}}}}]}},{"name":"avg_home_pregame_elo","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":502,"character":47}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":28},"end":{"line":502,"character":47}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePregameElo)","annotations":{"notes":[{"text":"#(doc) Average pregame Elo rating of the home team. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":501,"character":101}}}}]}},{"name":"home_team_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":505,"character":38}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":23},"end":{"line":505,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}}]},"expressionType":"aggregate","code":"count(HomeTeam)","annotations":{"notes":[{"text":"#(doc) Number of distinct teams appearing as the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":504,"character":64}}}}]}},{"name":"has_drive_detail","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":40,"character":64}}},"e":{"node":">","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"field","path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":24},"end":{"line":40,"character":60}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"coalesce(drive_counts.drive_rows, 0) > 0","annotations":{"notes":[{"text":"#(doc) True when this game has drive-by-drive detail, so a drive chart can be drawn. Division I games have it; Division II and III games do not.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":149}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":33}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":45,"character":19},"end":{"line":45,"character":33}}},"structPath":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives"],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"drives.count()","annotations":{"notes":[{"text":"#(doc) Number of drives (possessions) played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":50}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":47}}},"e":{"node":"field","path":["drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":48,"character":24},"end":{"line":48,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":48,"character":24},"end":{"line":48,"character":47}}}}]},"expressionType":"aggregate","code":"drives.points_per_drive","annotations":{"notes":[{"text":"#(doc) Average points scored per possession by both teams combined.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":72}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":50,"character":4},"end":{"line":52,"character":51}}},"e":{"node":"field","path":["drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":52,"character":26},"end":{"line":52,"character":51}}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":52,"character":26},"end":{"line":52,"character":51}}}}]},"expressionType":"aggregate","code":"drives.three_and_out_rate","annotations":{"notes":[{"text":"#(doc) Share of possessions that ended in a three-and-out punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":68}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":14}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-7b6d5ca9-77b0-4c6f-b89f-d0ee146be2ad","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-7b6d5ca9-77b0-4c6f-b89f-d0ee146be2ad","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-a9f9da78-a7b8-4623-b5e9-9827917751d8","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":56}}},"parameters":{},"as":"drives","annotations":{"blockNotes":[{"text":"#(doc) Every drive played in this game, one row per possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":66}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":38},"end":{"line":32,"character":40}}}},"right":{"node":"field","path":["drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":43},"end":{"line":32,"character":56}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":38},"end":{"line":32,"character":40}}}},{"path":["drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":43},"end":{"line":32,"character":56}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]}},{"name":"drive_rows","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":27},"end":{"line":20,"character":34}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"name":"drive_rows","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}}}],"primaryKey":"GameId"},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_rows","dir":"desc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":18,"character":29},"end":{"line":21,"character":1}}},"givenUsage":[]},"name":"QuerySource-b60bd7a8-6941-416a-8308-f43473a12577","as":"drive_counts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":12},"end":{"line":35,"character":73}}},"annotations":{"blockNotes":[{"text":"#(doc) How many drives the feed has for this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":34,"character":2},"end":{"line":34,"character":53}}}}]},"fields":[{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"name":"drive_rows","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"GameId","dialect":"duckdb","sourceID":"game_drive_counts@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","persistent":false,"referenceID":"game_drive_counts@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":49},"end":{"line":35,"character":51}}}},"right":{"node":"field","path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":49},"end":{"line":35,"character":51}}}},{"path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}]}},{"type":"turtle","name":"by_week","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}},"drillExpression":{"kind":"field_reference","name":"SeasonType","path":[]}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}},"drillExpression":{"kind":"field_reference","name":"Week","path":[]}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_excitement","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"avg_excitement","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"SeasonType"},{"field":"Week"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}}},{"path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games per week with scoring, margins and excitement, in schedule order. Answers how the season's weeks compare.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":509,"character":2},"end":{"line":509,"character":121}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":510,"character":8},"end":{"line":514,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}}]},"expressionType":"scalar","code":"HomeConference"},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"drillExpression":{"kind":"field_reference","name":"home_win_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"type":"fieldref","path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"drillExpression":{"kind":"field_reference","name":"avg_attendance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"home_win_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"name":"avg_attendance","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"HomeConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}}},{"path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}}},{"path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Volume and scoring of games by the home team's conference, busiest conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":516,"character":2},"end":{"line":516,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":517,"character":8},"end":{"line":522,"character":3}}}},{"type":"turtle","name":"by_classification","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"drillExpression":{"kind":"field_reference","name":"classification_matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"classification_matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"primaryKey":"classification_matchup"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games by division matchup, for example FBS against FCS, showing how lopsided each type of matchup is.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":524,"character":2},"end":{"line":524,"character":111}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":525,"character":8},"end":{"line":529,"character":3}}}},{"type":"turtle","name":"most_exciting_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]},"isRepeated":true,"orderBy":[{"field":"ExcitementIndex","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The wildest finishes of the season, ranked by excitement rating.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":531,"character":2},"end":{"line":531,"character":74}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":532,"character":8},"end":{"line":537,"character":3}}}},{"type":"turtle","name":"biggest_blowouts","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"victory_margin","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The most lopsided results of the season, ranked by winning margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":539,"character":2},"end":{"line":539,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":540,"character":8},"end":{"line":545,"character":3}}}},{"type":"turtle","name":"highest_scoring_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"total_points","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The highest-scoring games of the season, ranked by combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":547,"character":2},"end":{"line":547,"character":77}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":548,"character":8},"end":{"line":553,"character":3}}}},{"type":"turtle","name":"best_attended_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]}},{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]},"isRepeated":true,"orderBy":[{"field":"Attendance","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Attendance is not null","e":{"node":"is-not-null","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Best-attended games of the season, ranked by announced attendance.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":555,"character":2},"end":{"line":555,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":556,"character":8},"end":{"line":561,"character":3}}}},{"type":"turtle","name":"biggest_upsets","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"drillExpression":{"kind":"field_reference","name":"winner","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}},"e":{"node":"aggregate","function":"max","e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"field","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}}]},"expressionType":"scalar"},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":26},"end":{"line":567,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"max(abs(pregame_elo_edge))"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"winner","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}}}]},"isRepeated":true,"orderBy":[{"field":"elo_gap","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed and is_elo_upset","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},"right":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}}},{"path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games won by the team the pregame Elo ratings rated lower, biggest rating gap first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":563,"character":2},"end":{"line":563,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":564,"character":8},"end":{"line":570,"character":3}}}},{"type":"turtle","name":"playoff_bracket","pipeline":[{"type":"reduce","queryFields":[{"name":"round_name","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"name":"bracket_slot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}},"e":{"node":"field","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BracketSlot","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}}]},"expressionType":"scalar","code":"`Playoff BracketSlot`"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"round_name","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}}},{"name":"bracket_slot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}}},{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"bracket_slot"}],"filterList":[{"node":"filterCondition","code":"is_playoff_game","e":{"node":"field","path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The College Football Playoff bracket in round order, with each game's result.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":572,"character":2},"end":{"line":572,"character":87}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":573,"character":8},"end":{"line":583,"character":3}}}},{"type":"turtle","name":"scoring_trend","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"primaryKey":"game_date"},"isRepeated":true,"orderBy":[{"field":"game_date"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Season shape week by week: how many games are played and how many points are scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":585,"character":2},"end":{"line":585,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":586,"character":8},"end":{"line":590,"character":3}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"Id","dialect":"duckdb","persistent":false,"extends":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","sourceID":"games@file:///Users/timolsen/cfb-data/cfb-games/index.malloy"},"drives":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":67,"character":4},"end":{"line":68,"character":37}}},"e":{"node":"field","path":["game","season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":68,"character":20},"end":{"line":68,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"season_label","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":68,"character":20},"end":{"line":68,"character":37}}}}]},"expressionType":"scalar","code":"game.season_label","annotations":{"notes":[{"text":"#(doc) Season the drive was played in, as text, for example 2026.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":67,"character":4},"end":{"line":67,"character":70}}}}]}},{"name":"home_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":30}}},"e":{"node":"field","path":["game","HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":71,"character":17},"end":{"line":71,"character":30}}}},"drillExpression":{"kind":"field_reference","name":"HomeTeam","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":71,"character":17},"end":{"line":71,"character":30}}}}]},"expressionType":"scalar","code":"game.HomeTeam","annotations":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}},{"name":"away_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":74,"character":30}}},"e":{"node":"field","path":["game","AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":74,"character":17},"end":{"line":74,"character":30}}}},"drillExpression":{"kind":"field_reference","name":"AwayTeam","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":74,"character":17},"end":{"line":74,"character":30}}}}]},"expressionType":"scalar","code":"game.AwayTeam","annotations":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-7b6d5ca9-77b0-4c6f-b89f-d0ee146be2ad","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-7b6d5ca9-77b0-4c6f-b89f-d0ee146be2ad","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-a9f9da78-a7b8-4623-b5e9-9827917751d8","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_games","dialect":"duckdb","tablePath":"cfb_games","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Week","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"SeasonType","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartDate","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartTimeTBD","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"NeutralSite","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ConferenceGame","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"VenueId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ExcitementIndex","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Highlights","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Competition","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Format","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff RoundName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BracketSlot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BowlName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"calc_periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":96}}},"e":{"node":"+","kids":{"left":{"node":"-","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"pattern","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"replacement","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}}}},"name":"replace","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"node":"stringLiteral","literal":","},{"node":"stringLiteral","literal":""}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"length(HomeLineScores) - length(replace(HomeLineScores, ',', '')) + 1"},{"name":"calc_home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":46,"character":4},"end":{"line":50,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when HomeLineScores is null\n      else coalesce(split_part!string(HomeLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 3):::number, 0)"},{"name":"calc_away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":52,"character":4},"end":{"line":56,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when AwayLineScores is null\n      else coalesce(split_part!string(AwayLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 3):::number, 0)"}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":8},"end":{"line":28,"character":46}}},"parameters":{},"as":"games_raw","annotations":{"blockNotes":[{"text":"#(doc) Every game of every season in the feed, one row per game, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":27,"character":0},"end":{"line":27,"character":95}}}}]},"arguments":{}},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]},"expandedFieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":23},"end":{"line":57,"character":18}}},"givenUsage":[]},"name":"QuerySource-fe4242c0-7eb0-41b2-8085-7a9a6e1c1214","as":"games_lines","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":8},"end":{"line":57,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with the line score parsed: periods played and each team's points through three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":41,"character":0},"end":{"line":41,"character":103}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":90}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}}},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three - calc_away_points_after_three"},{"name":"calc_is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":98}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n      or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":86}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"35"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"28.0"}}}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"35 * greatest(0, 1 - abs(HomePoints - AwayPoints) / 28.0)"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":112}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"20"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"17.0"}}}}}]},"expressionType":"scalar"}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"coalesce(20 * greatest(0, 1 - abs(calc_home_points_after_three - calc_away_points_after_three) / 17.0), 0)"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":73,"character":4},"end":{"line":77,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}}}}}}}}],"caseThen":[{"node":"numberLiteral","literal":"10"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}]},"expressionType":"scalar","code":"pick 10 when\n        (HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n        or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)\n      else 0"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":71}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"15"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}}]},"expressionType":"scalar","code":"pick 15 when calc_periods_played > 4 else 0"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"12"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}}}}},"right":{"node":"numberLiteral","literal":"80.0"}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"12 * least(1, (HomePoints + AwayPoints) / 80.0)"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":83,"character":4},"end":{"line":87,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}}}}}}}}],"caseThen":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"10"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"250.0"}}}]},"expressionType":"scalar"}}}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expressionType":"scalar","code":"pick 10 * least(1, abs(HomePregameElo - AwayPregameElo) / 250.0) when\n        (HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n        or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)\n      else 0"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":4},"end":{"line":89,"character":78}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}}],"caseThen":[{"node":"numberLiteral","literal":"8"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}]},"expressionType":"scalar","code":"pick 8 when `Playoff Competition` is not null else 0"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_lines@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expandedFieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":30},"end":{"line":90,"character":18}}},"givenUsage":[]},"name":"QuerySource-55364bd1-5c2d-4c5c-a9b1-b32fdcf75a60","as":"games_thrill_parts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":8},"end":{"line":90,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with each part of the thrill index as its own column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":59,"character":0},"end":{"line":59,"character":67}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":95,"character":4},"end":{"line":100,"character":8}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"not","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}}},"right":{"node":"is-null","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}}}}},"right":{"node":"is-null","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND((",")::NUMERIC)"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}}}},"name":"round","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"100"},{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},"right":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}}}},"right":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}}}},"right":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}}}},"right":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}}}},"right":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}}}},"right":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}}}}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when not Completed or HomePoints is null or AwayPoints is null\n      else round(least(100,\n        calc_thrill_closeness + calc_thrill_late_drama + calc_thrill_comeback + calc_thrill_overtime\n        + calc_thrill_scoring + calc_thrill_upset + calc_thrill_stakes\n      ))"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_thrill_parts@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expandedFieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":93,"character":24},"end":{"line":101,"character":18}}},"givenUsage":[]},"name":"QuerySource-32030372-2367-4891-8bcb-c5da0137bccf","as":"game","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":12},"end":{"line":63,"character":50}}},"annotations":{"blockNotes":[{"text":"#(doc) The game this drive was played in, with its date, teams, venue and final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":62,"character":2},"end":{"line":62,"character":89}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Announced attendance for the game, in people. Missing for many games, especially at the Division II and Division III level.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":144,"character":4},"end":{"line":144,"character":135}}}}],"blockNotes":[]}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":191,"character":4},"end":{"line":191,"character":13}}}},{"text":"#(doc) Division the away team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":192,"character":4},"end":{"line":192,"character":102}}}}],"blockNotes":[]}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":195,"character":4},"end":{"line":195,"character":13}}}},{"text":"#(doc) Conference the away team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":196,"character":4},"end":{"line":196,"character":148}}}}],"blockNotes":[]}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":184,"character":4},"end":{"line":184,"character":47}}}}],"blockNotes":[]}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the away team scored in each period, as a comma-separated list in order, for example 3,7,7,0 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":134}}}}],"blockNotes":[]}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the away team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":89}}}}],"blockNotes":[]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":99}}}}],"blockNotes":[]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the away team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the home value to sum to 1 and is not the result itself.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":194}}}}],"blockNotes":[]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":106}}}}],"blockNotes":[]}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":187,"character":4},"end":{"line":187,"character":13}}}},{"text":"#(doc) Name of the away team, for example Michigan or Texas.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":188,"character":4},"end":{"line":188,"character":65}}}}],"blockNotes":[]}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game has been played and the final score is official.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":135,"character":4},"end":{"line":135,"character":79}}}}],"blockNotes":[]}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when both teams belong to the same conference, so the result counts in the conference standings.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":141,"character":4},"end":{"line":141,"character":113}}}}],"blockNotes":[]}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Excitement rating for the game, built from how much and how often the win probability swung. Typical games rate near 4; the wildest finishes rate above 8.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":214,"character":4},"end":{"line":214,"character":166}}}}],"blockNotes":[]}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Link to the game's video highlights, when one is published.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":217,"character":4},"end":{"line":217,"character":71}}}}],"blockNotes":[]}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":161,"character":4},"end":{"line":161,"character":13}}}},{"text":"#(doc) Division the home team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":102}}}}],"blockNotes":[]}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":13}}}},{"text":"#(doc) Conference the home team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":166,"character":4},"end":{"line":166,"character":148}}}}],"blockNotes":[]}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":154,"character":4},"end":{"line":154,"character":47}}}}],"blockNotes":[]}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the home team scored in each period, as a comma-separated list in order, for example 7,10,0,14 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":172,"character":4},"end":{"line":172,"character":136}}}}],"blockNotes":[]}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the home team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":169,"character":4},"end":{"line":169,"character":89}}}}],"blockNotes":[]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":181,"character":4},"end":{"line":181,"character":99}}}}],"blockNotes":[]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the home team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the away value to sum to 1 and is not the result itself — a team can lose a game it was 90% likely to win. Matches the actual winner in about 90% of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":175,"character":4},"end":{"line":175,"character":293}}}}],"blockNotes":[]}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":178,"character":4},"end":{"line":178,"character":106}}}}],"blockNotes":[]}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":157,"character":4},"end":{"line":157,"character":13}}}},{"text":"#(doc) Name of the home team, for example Alabama or Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":158,"character":4},"end":{"line":158,"character":69}}}}],"blockNotes":[]}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the game. Join key to the drives data, whose GameId column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":116,"character":4},"end":{"line":116,"character":114}}}}],"blockNotes":[]}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game was played at a neutral venue rather than either team's own stadium. Bowl games, playoff games and kickoff classics are typically neutral site.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":138,"character":4},"end":{"line":138,"character":174}}}}],"blockNotes":[]}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Free-text note about the game, usually the name of a kickoff event or a special circumstance, for example Aer Lingus College Football Classic.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":220,"character":4},"end":{"line":220,"character":154}}}}],"blockNotes":[]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the away team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":244,"character":4},"end":{"line":244,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":247,"character":4},"end":{"line":247,"character":13}}}},{"text":"#(doc) Bowl the playoff game was hosted by, for example Rose Bowl, Sugar Bowl or College Football Playoff National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":248,"character":4},"end":{"line":248,"character":133}}}}],"blockNotes":[]}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Slot the game occupies in the playoff bracket, for example QF1 for the first quarterfinal or CH for the championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":238,"character":4},"end":{"line":238,"character":129}}}}],"blockNotes":[]}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":223,"character":4},"end":{"line":223,"character":13}}}},{"text":"#(doc) Postseason competition the game belongs to. cfp for the College Football Playoff; missing for regular-season and ordinary bowl games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":224,"character":4},"end":{"line":224,"character":145}}}}],"blockNotes":[]}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff bracket format in force for the season, for example twelve_team_2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":227,"character":4},"end":{"line":227,"character":89}}}}],"blockNotes":[]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the home team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":241,"character":4},"end":{"line":241,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":230,"character":4},"end":{"line":230,"character":13}}}},{"text":"#(doc) Playoff round in machine form: first_round, quarterfinal, semifinal or championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":231,"character":4},"end":{"line":231,"character":96}}}}],"blockNotes":[]}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":234,"character":4},"end":{"line":234,"character":13}}}},{"text":"#(doc) Playoff round in readable form: First Round, Quarterfinal, Semifinal or National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":235,"character":4},"end":{"line":235,"character":106}}}}],"blockNotes":[]}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Season year the game belongs to: 2025 or 2026. A season's bowls and playoff games played in January still belong to the season that started in August.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":119,"character":4},"end":{"line":119,"character":162}}}}],"blockNotes":[]}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":13}}}},{"text":"#(doc) Portion of the season: regular for the regular season, postseason for bowls and College Football Playoff games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":126,"character":4},"end":{"line":126,"character":123}}}}],"blockNotes":[]}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Scheduled kickoff date and time, expressed in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":129,"character":4},"end":{"line":129,"character":80}}}}],"blockNotes":[]}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the kickoff time had not been announced yet, so only the date is meaningful.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":132,"character":4},"end":{"line":132,"character":98}}}}],"blockNotes":[]}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":150,"character":4},"end":{"line":150,"character":13}}}},{"text":"#(doc) Name of the stadium the game was played in, for example Bryant-Denny Stadium.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":151,"character":4},"end":{"line":151,"character":89}}}}],"blockNotes":[]}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the stadium the game was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":68}}}}],"blockNotes":[]}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Week of the season the game was played in, numbered within the season type. Regular-season weeks run 1 to 16; postseason bowl and playoff games carry their own week numbers.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":185}}}}],"blockNotes":[]}},{"name":"game_date","type":"date","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":259,"character":32}}},"e":{"node":"cast","dstType":{"type":"date"},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}},"safe":false,"srcType":{"type":"timestamp"}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}}]},"expressionType":"scalar","code":"StartDate::date","annotations":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}},{"name":"matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":262,"character":49}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"node":"stringLiteral","literal":" at "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":15},"end":{"line":262,"character":49}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(AwayTeam, ' at ', HomeTeam)","annotations":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}},{"name":"final_score","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":267,"character":93}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":11},"end":{"line":266,"character":93}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":11},"end":{"line":267,"character":93}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick concat(HomeTeam, ' ', HomePoints::string, ', ', AwayTeam, ' ', AwayPoints::string) when HomePoints >= AwayPoints\n      else concat(AwayTeam, ' ', AwayPoints::string, ', ', HomeTeam, ' ', HomePoints::string)","annotations":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}},{"name":"winner","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":273,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePoints > AwayPoints\n      pick AwayTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}},{"name":"loser","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":279,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}}}],"caseThen":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}]},"expressionType":"scalar","code":"pick AwayTeam when HomePoints > AwayPoints\n      pick HomeTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that lost the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":92}}}}]}},{"name":"home_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":282,"character":39}}},"e":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}]},"expressionType":"scalar","code":"HomePoints > AwayPoints","annotations":{"notes":[{"text":"#(doc) True when the home team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":40}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":285,"character":43}}},"e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints + AwayPoints","annotations":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}},{"name":"point_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":288,"character":43}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints - AwayPoints","annotations":{"notes":[{"text":"#(doc) Home points minus away points. Positive when the home team won, negative when the away team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":108}}}}]}},{"name":"victory_margin","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":291,"character":50}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":22},"end":{"line":291,"character":50}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(HomePoints - AwayPoints)","annotations":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}},{"name":"margin_bucket","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":298,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"8"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"16"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"27"}}}],"caseThen":[{"node":"stringLiteral","literal":"One-score game"},{"node":"stringLiteral","literal":"Two-score game"},{"node":"stringLiteral","literal":"Comfortable"}],"caseElse":{"node":"stringLiteral","literal":"Blowout"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":33},"end":{"line":295,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":33},"end":{"line":296,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":30},"end":{"line":297,"character":58}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'One-score game' when abs(HomePoints - AwayPoints) <= 8\n      pick 'Two-score game' when abs(HomePoints - AwayPoints) <= 16\n      pick 'Comfortable' when abs(HomePoints - AwayPoints) <= 27\n      else 'Blowout'","annotations":{"notes":[{"text":"#(doc) How close the game was: One-score game for a margin of 8 or less, Two-score game for 9 to 16, Comfortable for 17 to 27, and Blowout for 28 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":159}}}}]}},{"name":"classification_matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":301,"character":84}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"node":"stringLiteral","literal":" vs "},{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":30},"end":{"line":301,"character":84}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(HomeClassification, ' vs ', AwayClassification)","annotations":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}},{"name":"is_fbs_matchup","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":304,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},"right":{"node":"stringLiteral","literal":"fbs"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}},"right":{"node":"stringLiteral","literal":"fbs"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}}]},"expressionType":"scalar","code":"HomeClassification = 'fbs' and AwayClassification = 'fbs'","annotations":{"notes":[{"text":"#(doc) True when both teams are FBS programs, the top division of college football.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":303,"character":88}}}}]}},{"name":"is_playoff_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":307,"character":56}}},"e":{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}]},"expressionType":"scalar","code":"`Playoff Competition` is not null","annotations":{"notes":[{"text":"#(doc) True when the game is part of the College Football Playoff bracket.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":306,"character":79}}}}]}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":310,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}]},"expressionType":"scalar","code":"HomePregameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}},{"name":"elo_favorite","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":316,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePregameElo > AwayPregameElo\n      pick AwayTeam when AwayPregameElo > HomePregameElo\n      else null","annotations":{"notes":[{"text":"#(doc) Team the pregame Elo ratings favored, before any home-field adjustment.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":312,"character":83}}}}]}},{"name":"is_elo_upset","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":321,"character":70}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n      or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)","annotations":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}},{"name":"home_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":324,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}]},"expressionType":"scalar","code":"HomePostgameElo - HomePregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the home team gained from the game. Negative when the home team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":323,"character":109}}}}]}},{"name":"away_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":327,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}]},"expressionType":"scalar","code":"AwayPostgameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the away team gained from the game. Negative when the away team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":326,"character":109}}}}]}},{"name":"excitement_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":334,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},"right":{"node":"numberLiteral","literal":"8"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Competitive"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}}]},"expressionType":"scalar","code":"pick 'Instant classic' when ExcitementIndex > 8\n      pick 'Thriller' when ExcitementIndex > 6\n      pick 'Competitive' when ExcitementIndex > 4\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) How dramatic the game was, from its excitement rating: Instant classic above 8, Thriller above 6, Competitive above 4, and Routine at 4 or below.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":329,"character":157}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":340,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}}]},"expressionType":"scalar","code":"Season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":339,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":347,"character":42}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when SeasonType = 'postseason'\n      else concat('Week ', `Week`::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}},{"name":"week_sort","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":352,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"numberLiteral","literal":"100"}],"caseElse":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}]},"expressionType":"scalar","code":"pick 100 when SeasonType = 'postseason'\n      else `Week`","annotations":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}},{"name":"periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":363,"character":41}}},"e":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_periods_played","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}}]},"expressionType":"scalar","code":"calc_periods_played","annotations":{"notes":[{"text":"#(doc) Number of periods the game went, from the line score: 4 for regulation, 5 or more when it went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":362,"character":119}}}}]}},{"name":"is_overtime","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":366,"character":42}}},"e":{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},"right":{"node":"numberLiteral","literal":"4"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}}]},"expressionType":"scalar","code":"calc_periods_played > 4","annotations":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}},{"name":"home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":369,"character":59}}},"e":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_home_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three","annotations":{"notes":[{"text":"#(doc) Home team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":75}}}}]}},{"name":"away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":372,"character":59}}},"e":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_away_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}}]},"expressionType":"scalar","code":"calc_away_points_after_three","annotations":{"notes":[{"text":"#(doc) Away team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":371,"character":75}}}}]}},{"name":"margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":375,"character":49}}},"e":{"node":"field","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}},"drillExpression":{"kind":"field_reference","name":"calc_margin_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}}]},"expressionType":"scalar","code":"calc_margin_after_three","annotations":{"notes":[{"text":"#(doc) Home points minus away points going into the fourth quarter. Positive when the home team led.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":374,"character":105}}}}]}},{"name":"is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":378,"character":43}}},"e":{"node":"field","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_is_comeback_win","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}}]},"expressionType":"scalar","code":"calc_is_comeback_win","annotations":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}},{"name":"thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":400,"character":45}}},"e":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_closeness","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}}]},"expressionType":"scalar","code":"calc_thrill_closeness","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}},{"name":"thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":403,"character":47}}},"e":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_late_drama","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}}]},"expressionType":"scalar","code":"calc_thrill_late_drama","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}},{"name":"thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":406,"character":43}}},"e":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_comeback","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_comeback","annotations":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}},{"name":"thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":409,"character":43}}},"e":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_overtime","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_overtime","annotations":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}},{"name":"thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":412,"character":41}}},"e":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_scoring","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}}]},"expressionType":"scalar","code":"calc_thrill_scoring","annotations":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}},{"name":"thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":415,"character":37}}},"e":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_upset","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_upset","annotations":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}},{"name":"thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":418,"character":39}}},"e":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_stakes","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}}]},"expressionType":"scalar","code":"calc_thrill_stakes","annotations":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}},{"name":"thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":427,"character":37}}},"e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_index","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_index","annotations":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}},{"name":"thrill_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":435,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},"right":{"node":"numberLiteral","literal":"75"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},"right":{"node":"numberLiteral","literal":"55"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}},"right":{"node":"numberLiteral","literal":"35"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Good game"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}}]},"expressionType":"scalar","code":"pick null when calc_thrill_index is null\n      pick 'Instant classic' when calc_thrill_index >= 75\n      pick 'Thriller' when calc_thrill_index >= 55\n      pick 'Good game' when calc_thrill_index >= 35\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":25}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":441,"character":18},"end":{"line":441,"character":25}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}},{"name":"completed_game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":444,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":28},"end":{"line":444,"character":35}}}},"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: Completed }","annotations":{"notes":[{"text":"#(doc) Number of games that have been played and have a final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":443,"character":73}}}}]}},{"name":"points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":447,"character":54}}},"e":{"node":"+","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":21},"end":{"line":447,"character":36}}}},"right":{"node":"aggregate","function":"sum","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":39},"end":{"line":447,"character":54}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(HomePoints) + sum(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Total points scored by both teams across all games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":446,"character":63}}}}]}},{"name":"avg_total_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":450,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":24},"end":{"line":450,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(total_points)","annotations":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}},{"name":"avg_home_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":453,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":23},"end":{"line":453,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":452,"character":51}}}}]}},{"name":"avg_away_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":456,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":23},"end":{"line":456,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":455,"character":51}}}}]}},{"name":"avg_victory_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":459,"character":45}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":26},"end":{"line":459,"character":45}}}},"refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"avg(victory_margin)","annotations":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}},{"name":"home_win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":463,"character":119}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":21},"end":{"line":463,"character":28}}}},"filterList":[{"node":"filterCondition","code":"home_win","e":{"node":"field","path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":58},"end":{"line":463,"character":65}}}},"filterList":[{"node":"filterCondition","code":"Completed and HomePoints != AwayPoints","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":51},"end":{"line":463,"character":119}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: home_win } / nullif(count() { where: Completed and HomePoints != AwayPoints }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}},{"name":"one_score_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":467,"character":99}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":27},"end":{"line":467,"character":34}}}},"filterList":[{"node":"filterCondition","code":"victory_margin <= 8","e":{"node":"<=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},"right":{"node":"numberLiteral","literal":"8"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},{"path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":68},"end":{"line":467,"character":99}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: victory_margin <= 8 } / nullif(completed_game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games decided by 8 points or fewer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":465,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":466,"character":4},"end":{"line":466,"character":14}}}}]}},{"name":"blowout_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":470,"character":60}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":21},"end":{"line":470,"character":28}}}},"filterList":[{"node":"filterCondition","code":"victory_margin >= 28","e":{"node":">=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}},"right":{"node":"numberLiteral","literal":"28"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: victory_margin >= 28 }","annotations":{"notes":[{"text":"#(doc) Number of games decided by 28 points or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":469,"character":57}}}}]}},{"name":"upset_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":473,"character":50}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":19},"end":{"line":473,"character":26}}}},"filterList":[{"node":"filterCondition","code":"is_elo_upset","e":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"expressionType":"aggregate","code":"count() { where: is_elo_upset }","annotations":{"notes":[{"text":"#(doc) Number of games in which the team with the lower pregame Elo rating won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":472,"character":84}}}}]}},{"name":"total_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":476,"character":39}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":24},"end":{"line":476,"character":39}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Attendance)","annotations":{"notes":[{"text":"#(doc) Total announced attendance across all games that reported it, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":475,"character":84}}}}]}},{"name":"avg_attendance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":479,"character":37}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":22},"end":{"line":479,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(Attendance)","annotations":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}},{"name":"max_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":482,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":22},"end":{"line":482,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}}]},"expressionType":"aggregate","code":"max(Attendance)","annotations":{"notes":[{"text":"#(doc) Largest announced attendance for a single game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":481,"character":70}}}}]}},{"name":"avg_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":485,"character":42}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":22},"end":{"line":485,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}},{"name":"max_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":488,"character":42}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":22},"end":{"line":488,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}}]},"expressionType":"aggregate","code":"max(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Highest excitement rating of any game in the group.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":487,"character":63}}}}]}},{"name":"avg_thrill_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(thrill_index)","annotations":{"notes":[{"text":"#(doc) Average thrill index across completed games, 0 to 100.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":66}}}}]}},{"name":"neutral_site_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":495,"character":79}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":25},"end":{"line":495,"character":32}}}},"filterList":[{"node":"filterCondition","code":"NeutralSite","e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":58},"end":{"line":495,"character":79}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: NeutralSite } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played at a neutral venue.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":53}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":494,"character":4},"end":{"line":494,"character":14}}}}]}},{"name":"conference_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":499,"character":85}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":28},"end":{"line":499,"character":35}}}},"filterList":[{"node":"filterCondition","code":"ConferenceGame","e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":64},"end":{"line":499,"character":85}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: ConferenceGame } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played between teams from the same conference.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":497,"character":73}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":498,"character":4},"end":{"line":498,"character":14}}}}]}},{"name":"avg_home_pregame_elo","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":502,"character":47}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":28},"end":{"line":502,"character":47}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePregameElo)","annotations":{"notes":[{"text":"#(doc) Average pregame Elo rating of the home team. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":501,"character":101}}}}]}},{"name":"home_team_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":505,"character":38}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":23},"end":{"line":505,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}}]},"expressionType":"aggregate","code":"count(HomeTeam)","annotations":{"notes":[{"text":"#(doc) Number of distinct teams appearing as the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":504,"character":64}}}}]}},{"type":"turtle","name":"by_week","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}},"drillExpression":{"kind":"field_reference","name":"SeasonType","path":[]}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}},"drillExpression":{"kind":"field_reference","name":"Week","path":[]}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_excitement","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"avg_excitement","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"SeasonType"},{"field":"Week"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}}},{"path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games per week with scoring, margins and excitement, in schedule order. Answers how the season's weeks compare.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":509,"character":2},"end":{"line":509,"character":121}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":510,"character":8},"end":{"line":514,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}}]},"expressionType":"scalar","code":"HomeConference"},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"drillExpression":{"kind":"field_reference","name":"home_win_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"type":"fieldref","path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"drillExpression":{"kind":"field_reference","name":"avg_attendance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"home_win_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"name":"avg_attendance","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"HomeConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}}},{"path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}}},{"path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Volume and scoring of games by the home team's conference, busiest conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":516,"character":2},"end":{"line":516,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":517,"character":8},"end":{"line":522,"character":3}}}},{"type":"turtle","name":"by_classification","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"drillExpression":{"kind":"field_reference","name":"classification_matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"classification_matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"primaryKey":"classification_matchup"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games by division matchup, for example FBS against FCS, showing how lopsided each type of matchup is.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":524,"character":2},"end":{"line":524,"character":111}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":525,"character":8},"end":{"line":529,"character":3}}}},{"type":"turtle","name":"most_exciting_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]},"isRepeated":true,"orderBy":[{"field":"ExcitementIndex","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The wildest finishes of the season, ranked by excitement rating.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":531,"character":2},"end":{"line":531,"character":74}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":532,"character":8},"end":{"line":537,"character":3}}}},{"type":"turtle","name":"biggest_blowouts","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"victory_margin","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The most lopsided results of the season, ranked by winning margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":539,"character":2},"end":{"line":539,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":540,"character":8},"end":{"line":545,"character":3}}}},{"type":"turtle","name":"highest_scoring_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"total_points","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The highest-scoring games of the season, ranked by combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":547,"character":2},"end":{"line":547,"character":77}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":548,"character":8},"end":{"line":553,"character":3}}}},{"type":"turtle","name":"best_attended_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]}},{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]},"isRepeated":true,"orderBy":[{"field":"Attendance","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Attendance is not null","e":{"node":"is-not-null","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Best-attended games of the season, ranked by announced attendance.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":555,"character":2},"end":{"line":555,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":556,"character":8},"end":{"line":561,"character":3}}}},{"type":"turtle","name":"biggest_upsets","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"drillExpression":{"kind":"field_reference","name":"winner","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}},"e":{"node":"aggregate","function":"max","e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"field","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}}]},"expressionType":"scalar"},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":26},"end":{"line":567,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"max(abs(pregame_elo_edge))"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"winner","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}}}]},"isRepeated":true,"orderBy":[{"field":"elo_gap","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed and is_elo_upset","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},"right":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}}},{"path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games won by the team the pregame Elo ratings rated lower, biggest rating gap first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":563,"character":2},"end":{"line":563,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":564,"character":8},"end":{"line":570,"character":3}}}},{"type":"turtle","name":"playoff_bracket","pipeline":[{"type":"reduce","queryFields":[{"name":"round_name","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"name":"bracket_slot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}},"e":{"node":"field","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BracketSlot","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}}]},"expressionType":"scalar","code":"`Playoff BracketSlot`"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"round_name","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}}},{"name":"bracket_slot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}}},{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"bracket_slot"}],"filterList":[{"node":"filterCondition","code":"is_playoff_game","e":{"node":"field","path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The College Football Playoff bracket in round order, with each game's result.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":572,"character":2},"end":{"line":572,"character":87}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":573,"character":8},"end":{"line":583,"character":3}}}},{"type":"turtle","name":"scoring_trend","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"primaryKey":"game_date"},"isRepeated":true,"orderBy":[{"field":"game_date"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Season shape week by week: how many games are played and how many points are scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":585,"character":2},"end":{"line":585,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":586,"character":8},"end":{"line":590,"character":3}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"Id","dialect":"duckdb","persistent":false,"extends":"games_scored@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","sourceID":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","referenceID":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":34},"end":{"line":63,"character":40}}}},"right":{"node":"field","path":["game","Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":43},"end":{"line":63,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":34},"end":{"line":63,"character":40}}}},{"path":["game","Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":43},"end":{"line":63,"character":50}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}},{"type":"turtle","name":"game_drive_chart","pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":6},"end":{"line":79,"character":20}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}}]},"expressionType":"scalar","code":"Id"},{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":6},"end":{"line":80,"character":23}}},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}}]},"expressionType":"scalar","code":"GameId"},{"type":"fieldref","path":["home_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}},"drillExpression":{"kind":"field_reference","name":"home_team","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}}},{"type":"fieldref","path":["away_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}},"drillExpression":{"kind":"field_reference","name":"away_team","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}}},{"name":"drive_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":6},"end":{"line":83,"character":33}}},"e":{"node":"field","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}}]},"expressionType":"scalar","code":"DriveNumber"},{"name":"offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":6},"end":{"line":84,"character":24}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}}]},"expressionType":"scalar","code":"Offense"},{"name":"defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":6},"end":{"line":85,"character":24}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}}]},"expressionType":"scalar","code":"Defense"},{"name":"is_home_offense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":6},"end":{"line":86,"character":38}}},"e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"IsHomeOffense","path":[]},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}}]},"expressionType":"scalar","code":"IsHomeOffense"},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_period","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":33}}},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}},"drillExpression":{"kind":"field_reference","name":"StartPeriod","path":[]},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}}]},"expressionType":"scalar","code":"StartPeriod"},{"name":"start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":6},"end":{"line":91,"character":44}}},"e":{"node":"field","path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"chart_start_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}}]},"ungroupings":[],"expressionType":"scalar","code":"chart_start_yardline"},{"name":"end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":40}}},"e":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}},"drillExpression":{"kind":"field_reference","name":"chart_end_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}}]},"expressionType":"scalar","code":"chart_end_yardline"},{"name":"return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":58}}},"e":{"node":"field","path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}},"drillExpression":{"kind":"field_reference","name":"chart_return_start_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}}]},"expressionType":"scalar","code":"chart_return_start_yardline"},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["end_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}},"drillExpression":{"kind":"field_reference","name":"end_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}}},{"name":"plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":6},"end":{"line":96,"character":20}}},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}}]},"expressionType":"scalar","code":"Plays"},{"name":"yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":6},"end":{"line":97,"character":20}}},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}}]},"expressionType":"scalar","code":"Yards"},{"name":"elapsed_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":6},"end":{"line":98,"character":51}}},"e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}},"drillExpression":{"kind":"field_reference","name":"time_of_possession_seconds","path":[]},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}}]},"expressionType":"scalar","code":"time_of_possession_seconds"},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["result_abbreviation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}},"drillExpression":{"kind":"field_reference","name":"result_abbreviation","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}}},{"type":"fieldref","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}},"drillExpression":{"kind":"field_reference","name":"drive_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["defensive_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}},"drillExpression":{"kind":"field_reference","name":"defensive_score_type","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}}},{"type":"fieldref","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}},"drillExpression":{"kind":"field_reference","name":"is_special_teams_touchdown","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}}},{"type":"fieldref","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}},"drillExpression":{"kind":"field_reference","name":"is_kickoff_return_touchdown","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["special_teams_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}},"drillExpression":{"kind":"field_reference","name":"special_teams_score_type","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":6},"end":{"line":79,"character":20}}}},{"name":"game_id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":6},"end":{"line":80,"character":23}}}},{"name":"home_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}}},{"name":"away_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}}},{"name":"drive_number","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":6},"end":{"line":83,"character":33}}}},{"name":"offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":6},"end":{"line":84,"character":24}}}},{"name":"defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":6},"end":{"line":85,"character":24}}}},{"name":"is_home_offense","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":6},"end":{"line":86,"character":38}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_period","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":33}}}},{"name":"start_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":6},"end":{"line":91,"character":44}}}},{"name":"end_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":40}}}},{"name":"return_start_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":58}}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"end_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}}},{"name":"plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":6},"end":{"line":96,"character":20}}}},{"name":"yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":6},"end":{"line":97,"character":20}}}},{"name":"elapsed_seconds","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":6},"end":{"line":98,"character":51}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"result_abbreviation","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}}},{"name":"drive_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}}},{"name":"defensive_points_scored","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}}},{"name":"defensive_score_type","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}}},{"name":"is_special_teams_touchdown","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}}},{"name":"is_kickoff_return_touchdown","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}}},{"name":"special_teams_score_type","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"drive_number"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}},{"path":["home_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}}},{"path":["away_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}},{"path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}},{"path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}}},{"path":["end_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}},{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}}},{"path":["result_abbreviation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}}},{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}}},{"path":["defensive_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}}},{"path":["special_teams_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every possession of one game, in order, with the geometry and score ledger a drive chart draws from. Filter it to a single GameId.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":76,"character":2},"end":{"line":76,"character":140}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":77,"character":8},"end":{"line":110,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":60,"character":8},"end":{"line":111,"character":1}}},"parameters":{},"as":"drives","annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per drive (possession) of the 2025 and 2026 college football seasons, with the game\nit was played in joined in. Use it for offensive and defensive drive efficiency, Eckel rate,\nfield position, scoring rates, and drive-by-drive game charts.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":55,"character":0},"end":{"line":59,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per drive (a single possession) in the 2025 and 2026 college football seasons, covering\nthe full Division I schedule: every FBS game and every FCS game. Each drive records who had the ball and who was\ndefending, when the possession started and ended on the game clock, where it started and\nended on the field, how many plays and yards it produced, how it ended (touchdown, field\ngoal, punt, interception, fumble, turnover on downs, end of half), and the score for both\nteams before and after. Use it for drive efficiency, scoring rates, field position,\ntime of possession, three-and-outs, and drive-by-drive game charts. Joins to game-level\ninformation on GameId.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":236,"character":0},"end":{"line":245,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}}}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives@file:///Users/timolsen/cfb-data/cfb-games/index.malloy"},"SEASON":{"type":"given","name":"SEASON","id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy"},"DIVISION":{"type":"given","name":"DIVISION","id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy"},"CONFERENCE":{"type":"given","name":"CONFERENCE","id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy"},"TEAM":{"type":"given","name":"TEAM","id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy"},"GAME_WEEK":{"type":"given","name":"GAME_WEEK","id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy"},"EXCLUDE_GARBAGE":{"type":"given","name":"EXCLUDE_GARBAGE","id":"given/15:EXCLUDE_GARBAGE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy"},"season_suggest":{"type":"query","structRef":{"type":"sql_select","selectStr":"\n  WITH sides AS (\n    SELECT Id AS game_id, Season AS season, \"Week\" AS week_number, SeasonType AS season_type,\n      StartDate AS start_date, Completed AS completed, ConferenceGame AS conference_game,\n      TRUE AS is_home, HomeTeam AS team, HomeConference AS conference, HomeClassification AS classification,\n      AwayTeam AS opponent, AwayConference AS opponent_conference, AwayClassification AS opponent_classification,\n      HomePoints AS points_for, AwayPoints AS points_against,\n      HomePregameElo AS pregame_elo, HomePostgameElo AS postgame_elo, AwayPregameElo AS opponent_pregame_elo\n    FROM cfb_games\n    UNION ALL\n    SELECT Id, Season, \"Week\", SeasonType,\n      StartDate, Completed, ConferenceGame,\n      FALSE, AwayTeam, AwayConference, AwayClassification,\n      HomeTeam, HomeConference, HomeClassification,\n      AwayPoints, HomePoints,\n      AwayPregameElo, AwayPostgameElo, HomePregameElo\n    FROM cfb_games\n  )\n  SELECT *,\n    CAST(game_id AS VARCHAR) || '|' || team AS team_game_id,\n    -- the team's most recent game that carries a postgame Elo, so a\n    -- ranking can show where the rating stands now\n    postgame_elo IS NOT NULL\n      AND row_number() OVER (\n        PARTITION BY team, season, postgame_elo IS NULL ORDER BY start_date DESC\n      ) = 1 AS is_latest_rated_game\n  FROM sides\n","name":"sql://duckdb/a322d13b-ede6-5975-b3f3-b897e2cccf63","as":"team_games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":24,"character":8},"end":{"line":82,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per team per game in the 2025 and 2026 seasons: every game appears twice, once\nfrom each team's side, with points for and against, the team's and opponent's conference\nand division, and pregame and postgame Elo. Joins the drives the team ran and the drives it\ndefended, so a team's record, scoring margin and drive efficiency on both sides of the ball\ncome from one source. Use it for team rankings, records and strength of schedule.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":17,"character":0},"end":{"line":23,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) One row per team per game: every game appears twice, once from the home team's side and once from the away team's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":43,"character":0},"end":{"line":43,"character":122}}}}]}},"fields":[{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"week_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"start_date","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["start_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_home","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_home"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_for","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_against","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"postgame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team_game_id","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team_game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_latest_rated_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":37,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}]},"expressionType":"scalar","code":"season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":36,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":42,"character":47}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":11},"end":{"line":42,"character":47}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when season_type = 'postseason'\n      else concat('Week ', week_number::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16, or Postseason.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":81}}}}]}},{"name":"is_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}]},"expressionType":"scalar","code":"completed and points_for > points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team won it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":60}}}}]}},{"name":"is_loss","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":56}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}]},"expressionType":"scalar","code":"completed and points_for < points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team lost it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":61}}}}]}},{"name":"scoring_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":51,"character":49}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}]},"expressionType":"scalar","code":"points_for - points_against","annotations":{"notes":[{"text":"#(doc) This team's points minus its opponent's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":52}}}}]}},{"name":"games_played","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":56,"character":48}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":20},"end":{"line":56,"character":27}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"expressionType":"aggregate","code":"count() { where: completed }","annotations":{"notes":[{"text":"#(doc) Number of completed games played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":45}}}}]}},{"name":"wins","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":59,"character":37}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":12},"end":{"line":59,"character":19}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"expressionType":"aggregate","code":"count() { where: is_win }","annotations":{"notes":[{"text":"#(doc) Games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":22}}}}]}},{"name":"losses","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":62,"character":40}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":14},"end":{"line":62,"character":21}}}},"filterList":[{"node":"filterCondition","code":"is_loss","e":{"node":"field","path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"expressionType":"aggregate","code":"count() { where: is_loss }","annotations":{"notes":[{"text":"#(doc) Games lost.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":23}}}}]}},{"name":"win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":83}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":16},"end":{"line":66,"character":23}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":51},"end":{"line":66,"character":58}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":44},"end":{"line":66,"character":83}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_win } / nullif(count() { where: completed }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":41}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":14}}}}]}},{"name":"points_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":69,"character":59}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":23},"end":{"line":69,"character":38}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"expressionType":"aggregate","code":"avg(points_for) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points scored per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":53}}}}]}},{"name":"points_allowed_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":72,"character":71}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":31},"end":{"line":72,"character":50}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"expressionType":"aggregate","code":"avg(points_against) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points allowed per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":54}}}}]}},{"name":"avg_scoring_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":75,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":26},"end":{"line":75,"character":45}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"expressionType":"aggregate","code":"avg(scoring_margin) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average scoring margin per completed game. Positive means the team outscores its opponents.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":103}}}}]}},{"name":"current_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":78,"character":68}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":19},"end":{"line":78,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_latest_rated_game","e":{"node":"field","path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"expressionType":"aggregate","code":"max(postgame_elo) { where: is_latest_rated_game }","annotations":{"notes":[{"text":"#(doc) The team's Elo rating after its most recent rated game: where the rating stands now. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":141}}}}]}},{"name":"strength_of_schedule","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":28},"end":{"line":81,"character":53}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"expressionType":"aggregate","code":"avg(opponent_pregame_elo) { where: completed }","annotations":{"notes":[{"text":"#(doc) Strength of schedule: the average pregame Elo rating of the opponents played. Higher means a tougher schedule.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":122}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-e64d8f4a-aa80-4342-bf35-942bc7ee89cd","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":13},"end":{"line":29,"character":111}}},"parameters":{},"as":"offense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team ran on offense in this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":28,"character":2},"end":{"line":28,"character":59}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},"right":{"node":"field","path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},"right":{"node":"field","path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},{"path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},{"path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-e64d8f4a-aa80-4342-bf35-942bc7ee89cd","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":111}}},"parameters":{},"as":"defense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team defended in this game — its opponent's possessions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":82}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},"right":{"node":"field","path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},"right":{"node":"field","path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},{"path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},{"path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"team_game_id","dialect":"duckdb","persistent":false,"extends":"team_games_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","sourceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","referenceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":57,"character":12},"end":{"line":57,"character":24}}},"drillExpression":{"kind":"field_reference","name":"season_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":36,"character":85}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"season_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":57,"character":12},"end":{"line":57,"character":24}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":36,"character":85}}}}]}}}],"primaryKey":"season_label"},"isRepeated":true,"orderBy":[{"field":"season_label","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":57,"character":12},"end":{"line":57,"character":24}}}}]},"expandedFieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":57,"character":12},"end":{"line":57,"character":24}}}},{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":56,"character":7},"end":{"line":59,"character":1}}},"name":"season_suggest","annotations":{"blockNotes":[{"text":"#(doc) Every season in the data, newest first. Feeds the season picker.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":55,"character":0},"end":{"line":55,"character":72}}}}]},"givenUsage":[],"as":"season_suggest"},"division_suggest":{"type":"query","structRef":{"type":"sql_select","selectStr":"\n  WITH sides AS (\n    SELECT Id AS game_id, Season AS season, \"Week\" AS week_number, SeasonType AS season_type,\n      StartDate AS start_date, Completed AS completed, ConferenceGame AS conference_game,\n      TRUE AS is_home, HomeTeam AS team, HomeConference AS conference, HomeClassification AS classification,\n      AwayTeam AS opponent, AwayConference AS opponent_conference, AwayClassification AS opponent_classification,\n      HomePoints AS points_for, AwayPoints AS points_against,\n      HomePregameElo AS pregame_elo, HomePostgameElo AS postgame_elo, AwayPregameElo AS opponent_pregame_elo\n    FROM cfb_games\n    UNION ALL\n    SELECT Id, Season, \"Week\", SeasonType,\n      StartDate, Completed, ConferenceGame,\n      FALSE, AwayTeam, AwayConference, AwayClassification,\n      HomeTeam, HomeConference, HomeClassification,\n      AwayPoints, HomePoints,\n      AwayPregameElo, AwayPostgameElo, HomePregameElo\n    FROM cfb_games\n  )\n  SELECT *,\n    CAST(game_id AS VARCHAR) || '|' || team AS team_game_id,\n    -- the team's most recent game that carries a postgame Elo, so a\n    -- ranking can show where the rating stands now\n    postgame_elo IS NOT NULL\n      AND row_number() OVER (\n        PARTITION BY team, season, postgame_elo IS NULL ORDER BY start_date DESC\n      ) = 1 AS is_latest_rated_game\n  FROM sides\n","name":"sql://duckdb/a322d13b-ede6-5975-b3f3-b897e2cccf63","as":"team_games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":24,"character":8},"end":{"line":82,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per team per game in the 2025 and 2026 seasons: every game appears twice, once\nfrom each team's side, with points for and against, the team's and opponent's conference\nand division, and pregame and postgame Elo. Joins the drives the team ran and the drives it\ndefended, so a team's record, scoring margin and drive efficiency on both sides of the ball\ncome from one source. Use it for team rankings, records and strength of schedule.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":17,"character":0},"end":{"line":23,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) One row per team per game: every game appears twice, once from the home team's side and once from the away team's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":43,"character":0},"end":{"line":43,"character":122}}}}]}},"fields":[{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"week_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"start_date","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["start_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_home","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_home"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_for","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_against","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"postgame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team_game_id","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team_game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_latest_rated_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":37,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}]},"expressionType":"scalar","code":"season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":36,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":42,"character":47}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":11},"end":{"line":42,"character":47}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when season_type = 'postseason'\n      else concat('Week ', week_number::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16, or Postseason.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":81}}}}]}},{"name":"is_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}]},"expressionType":"scalar","code":"completed and points_for > points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team won it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":60}}}}]}},{"name":"is_loss","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":56}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}]},"expressionType":"scalar","code":"completed and points_for < points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team lost it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":61}}}}]}},{"name":"scoring_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":51,"character":49}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}]},"expressionType":"scalar","code":"points_for - points_against","annotations":{"notes":[{"text":"#(doc) This team's points minus its opponent's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":52}}}}]}},{"name":"games_played","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":56,"character":48}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":20},"end":{"line":56,"character":27}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"expressionType":"aggregate","code":"count() { where: completed }","annotations":{"notes":[{"text":"#(doc) Number of completed games played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":45}}}}]}},{"name":"wins","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":59,"character":37}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":12},"end":{"line":59,"character":19}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"expressionType":"aggregate","code":"count() { where: is_win }","annotations":{"notes":[{"text":"#(doc) Games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":22}}}}]}},{"name":"losses","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":62,"character":40}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":14},"end":{"line":62,"character":21}}}},"filterList":[{"node":"filterCondition","code":"is_loss","e":{"node":"field","path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"expressionType":"aggregate","code":"count() { where: is_loss }","annotations":{"notes":[{"text":"#(doc) Games lost.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":23}}}}]}},{"name":"win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":83}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":16},"end":{"line":66,"character":23}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":51},"end":{"line":66,"character":58}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":44},"end":{"line":66,"character":83}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_win } / nullif(count() { where: completed }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":41}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":14}}}}]}},{"name":"points_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":69,"character":59}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":23},"end":{"line":69,"character":38}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"expressionType":"aggregate","code":"avg(points_for) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points scored per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":53}}}}]}},{"name":"points_allowed_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":72,"character":71}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":31},"end":{"line":72,"character":50}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"expressionType":"aggregate","code":"avg(points_against) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points allowed per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":54}}}}]}},{"name":"avg_scoring_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":75,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":26},"end":{"line":75,"character":45}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"expressionType":"aggregate","code":"avg(scoring_margin) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average scoring margin per completed game. Positive means the team outscores its opponents.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":103}}}}]}},{"name":"current_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":78,"character":68}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":19},"end":{"line":78,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_latest_rated_game","e":{"node":"field","path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"expressionType":"aggregate","code":"max(postgame_elo) { where: is_latest_rated_game }","annotations":{"notes":[{"text":"#(doc) The team's Elo rating after its most recent rated game: where the rating stands now. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":141}}}}]}},{"name":"strength_of_schedule","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":28},"end":{"line":81,"character":53}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"expressionType":"aggregate","code":"avg(opponent_pregame_elo) { where: completed }","annotations":{"notes":[{"text":"#(doc) Strength of schedule: the average pregame Elo rating of the opponents played. Higher means a tougher schedule.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":122}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-e64d8f4a-aa80-4342-bf35-942bc7ee89cd","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":13},"end":{"line":29,"character":111}}},"parameters":{},"as":"offense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team ran on offense in this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":28,"character":2},"end":{"line":28,"character":59}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},"right":{"node":"field","path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},"right":{"node":"field","path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},{"path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},{"path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-e64d8f4a-aa80-4342-bf35-942bc7ee89cd","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":111}}},"parameters":{},"as":"defense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team defended in this game — its opponent's possessions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":82}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},"right":{"node":"field","path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},"right":{"node":"field","path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},{"path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},{"path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"team_game_id","dialect":"duckdb","persistent":false,"extends":"team_games_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","sourceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","referenceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":64,"character":12},"end":{"line":64,"character":26}}},"drillExpression":{"kind":"field_reference","name":"classification","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"classification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":64,"character":12},"end":{"line":64,"character":26}}}}],"primaryKey":"classification"},"isRepeated":true,"orderBy":[{"field":"classification"}],"filterList":[{"node":"filterCondition","code":"season_label ~ $SEASON","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"SEASON","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":24},"end":{"line":63,"character":31}}}},"expr":{"node":"field","path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":9},"end":{"line":63,"character":21}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":9},"end":{"line":63,"character":21}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":24},"end":{"line":63,"character":31}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"classification is not null","e":{"node":"is-not-null","e":{"node":"field","path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":33},"end":{"line":63,"character":47}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":33},"end":{"line":63,"character":47}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":9},"end":{"line":63,"character":21}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":33},"end":{"line":63,"character":47}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":64,"character":12},"end":{"line":64,"character":26}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":24},"end":{"line":63,"character":31}}}}]},"expandedFieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":9},"end":{"line":63,"character":21}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":33},"end":{"line":63,"character":47}}}},{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}],"expandedGivenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":24},"end":{"line":63,"character":31}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":62,"character":7},"end":{"line":66,"character":1}}},"name":"division_suggest","annotations":{"blockNotes":[{"text":"#(doc) Divisions with games in the chosen season. Feeds the division picker.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":61,"character":0},"end":{"line":61,"character":77}}}}]},"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":63,"character":24},"end":{"line":63,"character":31}}}}],"as":"division_suggest"},"conference_suggest":{"type":"query","structRef":{"type":"sql_select","selectStr":"\n  WITH sides AS (\n    SELECT Id AS game_id, Season AS season, \"Week\" AS week_number, SeasonType AS season_type,\n      StartDate AS start_date, Completed AS completed, ConferenceGame AS conference_game,\n      TRUE AS is_home, HomeTeam AS team, HomeConference AS conference, HomeClassification AS classification,\n      AwayTeam AS opponent, AwayConference AS opponent_conference, AwayClassification AS opponent_classification,\n      HomePoints AS points_for, AwayPoints AS points_against,\n      HomePregameElo AS pregame_elo, HomePostgameElo AS postgame_elo, AwayPregameElo AS opponent_pregame_elo\n    FROM cfb_games\n    UNION ALL\n    SELECT Id, Season, \"Week\", SeasonType,\n      StartDate, Completed, ConferenceGame,\n      FALSE, AwayTeam, AwayConference, AwayClassification,\n      HomeTeam, HomeConference, HomeClassification,\n      AwayPoints, HomePoints,\n      AwayPregameElo, AwayPostgameElo, HomePregameElo\n    FROM cfb_games\n  )\n  SELECT *,\n    CAST(game_id AS VARCHAR) || '|' || team AS team_game_id,\n    -- the team's most recent game that carries a postgame Elo, so a\n    -- ranking can show where the rating stands now\n    postgame_elo IS NOT NULL\n      AND row_number() OVER (\n        PARTITION BY team, season, postgame_elo IS NULL ORDER BY start_date DESC\n      ) = 1 AS is_latest_rated_game\n  FROM sides\n","name":"sql://duckdb/a322d13b-ede6-5975-b3f3-b897e2cccf63","as":"team_games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":24,"character":8},"end":{"line":82,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per team per game in the 2025 and 2026 seasons: every game appears twice, once\nfrom each team's side, with points for and against, the team's and opponent's conference\nand division, and pregame and postgame Elo. Joins the drives the team ran and the drives it\ndefended, so a team's record, scoring margin and drive efficiency on both sides of the ball\ncome from one source. Use it for team rankings, records and strength of schedule.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":17,"character":0},"end":{"line":23,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) One row per team per game: every game appears twice, once from the home team's side and once from the away team's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":43,"character":0},"end":{"line":43,"character":122}}}}]}},"fields":[{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"week_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"start_date","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["start_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_home","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_home"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_for","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_against","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"postgame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team_game_id","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team_game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_latest_rated_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":37,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}]},"expressionType":"scalar","code":"season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":36,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":42,"character":47}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":11},"end":{"line":42,"character":47}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when season_type = 'postseason'\n      else concat('Week ', week_number::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16, or Postseason.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":81}}}}]}},{"name":"is_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}]},"expressionType":"scalar","code":"completed and points_for > points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team won it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":60}}}}]}},{"name":"is_loss","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":56}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}]},"expressionType":"scalar","code":"completed and points_for < points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team lost it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":61}}}}]}},{"name":"scoring_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":51,"character":49}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}]},"expressionType":"scalar","code":"points_for - points_against","annotations":{"notes":[{"text":"#(doc) This team's points minus its opponent's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":52}}}}]}},{"name":"games_played","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":56,"character":48}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":20},"end":{"line":56,"character":27}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"expressionType":"aggregate","code":"count() { where: completed }","annotations":{"notes":[{"text":"#(doc) Number of completed games played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":45}}}}]}},{"name":"wins","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":59,"character":37}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":12},"end":{"line":59,"character":19}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"expressionType":"aggregate","code":"count() { where: is_win }","annotations":{"notes":[{"text":"#(doc) Games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":22}}}}]}},{"name":"losses","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":62,"character":40}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":14},"end":{"line":62,"character":21}}}},"filterList":[{"node":"filterCondition","code":"is_loss","e":{"node":"field","path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"expressionType":"aggregate","code":"count() { where: is_loss }","annotations":{"notes":[{"text":"#(doc) Games lost.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":23}}}}]}},{"name":"win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":83}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":16},"end":{"line":66,"character":23}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":51},"end":{"line":66,"character":58}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":44},"end":{"line":66,"character":83}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_win } / nullif(count() { where: completed }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":41}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":14}}}}]}},{"name":"points_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":69,"character":59}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":23},"end":{"line":69,"character":38}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"expressionType":"aggregate","code":"avg(points_for) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points scored per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":53}}}}]}},{"name":"points_allowed_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":72,"character":71}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":31},"end":{"line":72,"character":50}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"expressionType":"aggregate","code":"avg(points_against) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points allowed per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":54}}}}]}},{"name":"avg_scoring_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":75,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":26},"end":{"line":75,"character":45}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"expressionType":"aggregate","code":"avg(scoring_margin) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average scoring margin per completed game. Positive means the team outscores its opponents.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":103}}}}]}},{"name":"current_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":78,"character":68}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":19},"end":{"line":78,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_latest_rated_game","e":{"node":"field","path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"expressionType":"aggregate","code":"max(postgame_elo) { where: is_latest_rated_game }","annotations":{"notes":[{"text":"#(doc) The team's Elo rating after its most recent rated game: where the rating stands now. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":141}}}}]}},{"name":"strength_of_schedule","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":28},"end":{"line":81,"character":53}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"expressionType":"aggregate","code":"avg(opponent_pregame_elo) { where: completed }","annotations":{"notes":[{"text":"#(doc) Strength of schedule: the average pregame Elo rating of the opponents played. Higher means a tougher schedule.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":122}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-e64d8f4a-aa80-4342-bf35-942bc7ee89cd","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":13},"end":{"line":29,"character":111}}},"parameters":{},"as":"offense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team ran on offense in this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":28,"character":2},"end":{"line":28,"character":59}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},"right":{"node":"field","path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},"right":{"node":"field","path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},{"path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},{"path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-e64d8f4a-aa80-4342-bf35-942bc7ee89cd","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":111}}},"parameters":{},"as":"defense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team defended in this game — its opponent's possessions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":82}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},"right":{"node":"field","path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},"right":{"node":"field","path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},{"path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},{"path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"team_game_id","dialect":"duckdb","persistent":false,"extends":"team_games_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","sourceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","referenceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":71,"character":12},"end":{"line":71,"character":22}}},"drillExpression":{"kind":"field_reference","name":"conference","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":71,"character":12},"end":{"line":71,"character":22}}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"conference"}],"filterList":[{"node":"filterCondition","code":"season_label ~ $SEASON","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"SEASON","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":24},"end":{"line":70,"character":31}}}},"expr":{"node":"field","path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":9},"end":{"line":70,"character":21}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":9},"end":{"line":70,"character":21}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":24},"end":{"line":70,"character":31}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"classification ~ $DIVISION","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"DIVISION","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":50},"end":{"line":70,"character":59}}}},"expr":{"node":"field","path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":33},"end":{"line":70,"character":47}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":33},"end":{"line":70,"character":47}}}}],"givenUsage":[{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":50},"end":{"line":70,"character":59}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"conference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":61},"end":{"line":70,"character":71}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":61},"end":{"line":70,"character":71}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":9},"end":{"line":70,"character":21}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":33},"end":{"line":70,"character":47}}}},{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":61},"end":{"line":70,"character":71}}}},{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":71,"character":12},"end":{"line":71,"character":22}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":24},"end":{"line":70,"character":31}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":50},"end":{"line":70,"character":59}}}}]},"expandedFieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":9},"end":{"line":70,"character":21}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":33},"end":{"line":70,"character":47}}}},{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":61},"end":{"line":70,"character":71}}}},{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}],"expandedGivenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":24},"end":{"line":70,"character":31}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":50},"end":{"line":70,"character":59}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":69,"character":7},"end":{"line":73,"character":1}}},"name":"conference_suggest","annotations":{"blockNotes":[{"text":"#(doc) Conferences in the chosen season and division, alphabetically. Feeds the conference picker.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":68,"character":0},"end":{"line":68,"character":99}}}}]},"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":24},"end":{"line":70,"character":31}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":70,"character":50},"end":{"line":70,"character":59}}}}],"as":"conference_suggest"},"team_suggest":{"type":"query","structRef":{"type":"sql_select","selectStr":"\n  WITH sides AS (\n    SELECT Id AS game_id, Season AS season, \"Week\" AS week_number, SeasonType AS season_type,\n      StartDate AS start_date, Completed AS completed, ConferenceGame AS conference_game,\n      TRUE AS is_home, HomeTeam AS team, HomeConference AS conference, HomeClassification AS classification,\n      AwayTeam AS opponent, AwayConference AS opponent_conference, AwayClassification AS opponent_classification,\n      HomePoints AS points_for, AwayPoints AS points_against,\n      HomePregameElo AS pregame_elo, HomePostgameElo AS postgame_elo, AwayPregameElo AS opponent_pregame_elo\n    FROM cfb_games\n    UNION ALL\n    SELECT Id, Season, \"Week\", SeasonType,\n      StartDate, Completed, ConferenceGame,\n      FALSE, AwayTeam, AwayConference, AwayClassification,\n      HomeTeam, HomeConference, HomeClassification,\n      AwayPoints, HomePoints,\n      AwayPregameElo, AwayPostgameElo, HomePregameElo\n    FROM cfb_games\n  )\n  SELECT *,\n    CAST(game_id AS VARCHAR) || '|' || team AS team_game_id,\n    -- the team's most recent game that carries a postgame Elo, so a\n    -- ranking can show where the rating stands now\n    postgame_elo IS NOT NULL\n      AND row_number() OVER (\n        PARTITION BY team, season, postgame_elo IS NULL ORDER BY start_date DESC\n      ) = 1 AS is_latest_rated_game\n  FROM sides\n","name":"sql://duckdb/a322d13b-ede6-5975-b3f3-b897e2cccf63","as":"team_games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":24,"character":8},"end":{"line":82,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per team per game in the 2025 and 2026 seasons: every game appears twice, once\nfrom each team's side, with points for and against, the team's and opponent's conference\nand division, and pregame and postgame Elo. Joins the drives the team ran and the drives it\ndefended, so a team's record, scoring margin and drive efficiency on both sides of the ball\ncome from one source. Use it for team rankings, records and strength of schedule.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":17,"character":0},"end":{"line":23,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) One row per team per game: every game appears twice, once from the home team's side and once from the away team's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":43,"character":0},"end":{"line":43,"character":122}}}}]}},"fields":[{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"week_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"start_date","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["start_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_home","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_home"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_for","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_against","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"postgame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team_game_id","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team_game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_latest_rated_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":37,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}]},"expressionType":"scalar","code":"season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":36,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":42,"character":47}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":11},"end":{"line":42,"character":47}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when season_type = 'postseason'\n      else concat('Week ', week_number::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16, or Postseason.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":81}}}}]}},{"name":"is_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}]},"expressionType":"scalar","code":"completed and points_for > points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team won it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":60}}}}]}},{"name":"is_loss","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":56}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}]},"expressionType":"scalar","code":"completed and points_for < points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team lost it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":61}}}}]}},{"name":"scoring_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":51,"character":49}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}]},"expressionType":"scalar","code":"points_for - points_against","annotations":{"notes":[{"text":"#(doc) This team's points minus its opponent's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":52}}}}]}},{"name":"games_played","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":56,"character":48}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":20},"end":{"line":56,"character":27}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"expressionType":"aggregate","code":"count() { where: completed }","annotations":{"notes":[{"text":"#(doc) Number of completed games played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":45}}}}]}},{"name":"wins","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":59,"character":37}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":12},"end":{"line":59,"character":19}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"expressionType":"aggregate","code":"count() { where: is_win }","annotations":{"notes":[{"text":"#(doc) Games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":22}}}}]}},{"name":"losses","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":62,"character":40}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":14},"end":{"line":62,"character":21}}}},"filterList":[{"node":"filterCondition","code":"is_loss","e":{"node":"field","path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"expressionType":"aggregate","code":"count() { where: is_loss }","annotations":{"notes":[{"text":"#(doc) Games lost.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":23}}}}]}},{"name":"win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":83}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":16},"end":{"line":66,"character":23}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":51},"end":{"line":66,"character":58}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":44},"end":{"line":66,"character":83}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_win } / nullif(count() { where: completed }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":41}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":14}}}}]}},{"name":"points_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":69,"character":59}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":23},"end":{"line":69,"character":38}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"expressionType":"aggregate","code":"avg(points_for) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points scored per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":53}}}}]}},{"name":"points_allowed_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":72,"character":71}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":31},"end":{"line":72,"character":50}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"expressionType":"aggregate","code":"avg(points_against) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points allowed per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":54}}}}]}},{"name":"avg_scoring_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":75,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":26},"end":{"line":75,"character":45}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"expressionType":"aggregate","code":"avg(scoring_margin) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average scoring margin per completed game. Positive means the team outscores its opponents.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":103}}}}]}},{"name":"current_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":78,"character":68}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":19},"end":{"line":78,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_latest_rated_game","e":{"node":"field","path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"expressionType":"aggregate","code":"max(postgame_elo) { where: is_latest_rated_game }","annotations":{"notes":[{"text":"#(doc) The team's Elo rating after its most recent rated game: where the rating stands now. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":141}}}}]}},{"name":"strength_of_schedule","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":28},"end":{"line":81,"character":53}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"expressionType":"aggregate","code":"avg(opponent_pregame_elo) { where: completed }","annotations":{"notes":[{"text":"#(doc) Strength of schedule: the average pregame Elo rating of the opponents played. Higher means a tougher schedule.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":122}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-e64d8f4a-aa80-4342-bf35-942bc7ee89cd","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":13},"end":{"line":29,"character":111}}},"parameters":{},"as":"offense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team ran on offense in this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":28,"character":2},"end":{"line":28,"character":59}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},"right":{"node":"field","path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},"right":{"node":"field","path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},{"path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},{"path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-c0b2c61b-cd21-428e-bbfd-162f63687f30","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-e64d8f4a-aa80-4342-bf35-942bc7ee89cd","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":111}}},"parameters":{},"as":"defense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team defended in this game — its opponent's possessions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":82}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},"right":{"node":"field","path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},"right":{"node":"field","path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},{"path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},{"path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"team_game_id","dialect":"duckdb","persistent":false,"extends":"team_games_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","sourceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","referenceID":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":78,"character":12},"end":{"line":78,"character":16}}},"drillExpression":{"kind":"field_reference","name":"team","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":78,"character":12},"end":{"line":78,"character":16}}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"team"}],"filterList":[{"node":"filterCondition","code":"season_label ~ $SEASON","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"SEASON","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":31}}}},"expr":{"node":"field","path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":9},"end":{"line":77,"character":21}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":9},"end":{"line":77,"character":21}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":31}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"classification ~ $DIVISION","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"DIVISION","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":50},"end":{"line":77,"character":59}}}},"expr":{"node":"field","path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":33},"end":{"line":77,"character":47}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":33},"end":{"line":77,"character":47}}}}],"givenUsage":[{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":50},"end":{"line":77,"character":59}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"conference ~ $CONFERENCE","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"CONFERENCE","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":74},"end":{"line":77,"character":85}}}},"expr":{"node":"field","path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":61},"end":{"line":77,"character":71}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":61},"end":{"line":77,"character":71}}}}],"givenUsage":[{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":74},"end":{"line":77,"character":85}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":9},"end":{"line":77,"character":21}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":33},"end":{"line":77,"character":47}}}},{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":61},"end":{"line":77,"character":71}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":78,"character":12},"end":{"line":78,"character":16}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":31}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":50},"end":{"line":77,"character":59}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":74},"end":{"line":77,"character":85}}}}]},"expandedFieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":9},"end":{"line":77,"character":21}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":33},"end":{"line":77,"character":47}}}},{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":61},"end":{"line":77,"character":71}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":78,"character":12},"end":{"line":78,"character":16}}}},{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}],"expandedGivenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":31}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":50},"end":{"line":77,"character":59}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":74},"end":{"line":77,"character":85}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":76,"character":7},"end":{"line":80,"character":1}}},"name":"team_suggest","annotations":{"blockNotes":[{"text":"#(doc) Teams in the chosen season, division and conference, alphabetically. Feeds the team picker.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":75,"character":0},"end":{"line":75,"character":99}}}}]},"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":31}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":50},"end":{"line":77,"character":59}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":77,"character":74},"end":{"line":77,"character":85}}}}],"as":"team_suggest"},"week_suggest":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_games","dialect":"duckdb","tablePath":"cfb_games","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Week","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"SeasonType","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartDate","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartTimeTBD","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"NeutralSite","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ConferenceGame","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"VenueId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ExcitementIndex","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Highlights","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Competition","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Format","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff RoundName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BracketSlot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BowlName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"calc_periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":96}}},"e":{"node":"+","kids":{"left":{"node":"-","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"pattern","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"replacement","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}}}},"name":"replace","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"node":"stringLiteral","literal":","},{"node":"stringLiteral","literal":""}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"length(HomeLineScores) - length(replace(HomeLineScores, ',', '')) + 1"},{"name":"calc_home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":46,"character":4},"end":{"line":50,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when HomeLineScores is null\n      else coalesce(split_part!string(HomeLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 3):::number, 0)"},{"name":"calc_away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":52,"character":4},"end":{"line":56,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when AwayLineScores is null\n      else coalesce(split_part!string(AwayLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 3):::number, 0)"}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":8},"end":{"line":28,"character":46}}},"parameters":{},"as":"games_raw","annotations":{"blockNotes":[{"text":"#(doc) Every game of every season in the feed, one row per game, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":27,"character":0},"end":{"line":27,"character":95}}}}]},"arguments":{}},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]},"expandedFieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":23},"end":{"line":57,"character":18}}},"givenUsage":[]},"name":"QuerySource-3e437c94-24d0-4e2f-8990-c78b78797394","as":"games_lines","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":8},"end":{"line":57,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with the line score parsed: periods played and each team's points through three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":41,"character":0},"end":{"line":41,"character":103}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":90}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}}},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three - calc_away_points_after_three"},{"name":"calc_is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":98}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n      or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":86}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"35"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"28.0"}}}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"35 * greatest(0, 1 - abs(HomePoints - AwayPoints) / 28.0)"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":112}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"20"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"17.0"}}}}}]},"expressionType":"scalar"}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"coalesce(20 * greatest(0, 1 - abs(calc_home_points_after_three - calc_away_points_after_three) / 17.0), 0)"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":73,"character":4},"end":{"line":77,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}}}}}}}}],"caseThen":[{"node":"numberLiteral","literal":"10"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}]},"expressionType":"scalar","code":"pick 10 when\n        (HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n        or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)\n      else 0"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":71}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"15"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}}]},"expressionType":"scalar","code":"pick 15 when calc_periods_played > 4 else 0"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"12"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}}}}},"right":{"node":"numberLiteral","literal":"80.0"}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"12 * least(1, (HomePoints + AwayPoints) / 80.0)"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":83,"character":4},"end":{"line":87,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}}}}}}}}],"caseThen":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"10"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"250.0"}}}]},"expressionType":"scalar"}}}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expressionType":"scalar","code":"pick 10 * least(1, abs(HomePregameElo - AwayPregameElo) / 250.0) when\n        (HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n        or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)\n      else 0"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":4},"end":{"line":89,"character":78}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}}],"caseThen":[{"node":"numberLiteral","literal":"8"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}]},"expressionType":"scalar","code":"pick 8 when `Playoff Competition` is not null else 0"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_lines@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expandedFieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":30},"end":{"line":90,"character":18}}},"givenUsage":[]},"name":"QuerySource-323cf939-8e13-4e52-8591-4aeb780f0c75","as":"games_thrill_parts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":8},"end":{"line":90,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with each part of the thrill index as its own column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":59,"character":0},"end":{"line":59,"character":67}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":95,"character":4},"end":{"line":100,"character":8}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"not","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}}},"right":{"node":"is-null","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}}}}},"right":{"node":"is-null","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND((",")::NUMERIC)"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}}}},"name":"round","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"100"},{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},"right":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}}}},"right":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}}}},"right":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}}}},"right":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}}}},"right":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}}}},"right":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}}}}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when not Completed or HomePoints is null or AwayPoints is null\n      else round(least(100,\n        calc_thrill_closeness + calc_thrill_late_drama + calc_thrill_comeback + calc_thrill_overtime\n        + calc_thrill_scoring + calc_thrill_upset + calc_thrill_stakes\n      ))"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_thrill_parts@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expandedFieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":93,"character":24},"end":{"line":101,"character":18}}},"givenUsage":[]},"name":"QuerySource-b61fd42b-8ed1-47ec-960a-df9e303a5e0b","as":"games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":29,"character":8},"end":{"line":53,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per college football game in the 2025 and 2026 seasons, with every drive of that\ngame joined in. Carries the final score, line score, venue, conferences, Elo, CFBD's\nexcitement rating and a box-score thrill index, plus drive-level totals. Use it for\nschedules, results, the most exciting games, and game summaries.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":23,"character":0},"end":{"line":28,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per college football game in the 2025 and 2026 seasons, across every division: FBS, FCS, Division II\nand Division III. Each game carries the final score, venue and announced attendance,\nthe conference and division of both teams, pregame and postgame Elo ratings, postgame\nwin probability, an excitement rating, and College Football Playoff bracket details\nfor playoff games. Use it for schedules, results, margins, attendance, rankings-style\nElo movement, and as the game-level context for drive-by-drive data, which joins on\ngame id.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":103,"character":0},"end":{"line":111,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) Games with the thrill index itself as a column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":92,"character":0},"end":{"line":92,"character":55}}}}]}}},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Announced attendance for the game, in people. Missing for many games, especially at the Division II and Division III level.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":144,"character":4},"end":{"line":144,"character":135}}}}],"blockNotes":[]}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":191,"character":4},"end":{"line":191,"character":13}}}},{"text":"#(doc) Division the away team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":192,"character":4},"end":{"line":192,"character":102}}}}],"blockNotes":[]}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":195,"character":4},"end":{"line":195,"character":13}}}},{"text":"#(doc) Conference the away team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":196,"character":4},"end":{"line":196,"character":148}}}}],"blockNotes":[]}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":184,"character":4},"end":{"line":184,"character":47}}}}],"blockNotes":[]}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the away team scored in each period, as a comma-separated list in order, for example 3,7,7,0 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":134}}}}],"blockNotes":[]}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the away team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":89}}}}],"blockNotes":[]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":99}}}}],"blockNotes":[]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the away team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the home value to sum to 1 and is not the result itself.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":194}}}}],"blockNotes":[]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":106}}}}],"blockNotes":[]}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":187,"character":4},"end":{"line":187,"character":13}}}},{"text":"#(doc) Name of the away team, for example Michigan or Texas.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":188,"character":4},"end":{"line":188,"character":65}}}}],"blockNotes":[]}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game has been played and the final score is official.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":135,"character":4},"end":{"line":135,"character":79}}}}],"blockNotes":[]}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when both teams belong to the same conference, so the result counts in the conference standings.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":141,"character":4},"end":{"line":141,"character":113}}}}],"blockNotes":[]}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Excitement rating for the game, built from how much and how often the win probability swung. Typical games rate near 4; the wildest finishes rate above 8.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":214,"character":4},"end":{"line":214,"character":166}}}}],"blockNotes":[]}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Link to the game's video highlights, when one is published.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":217,"character":4},"end":{"line":217,"character":71}}}}],"blockNotes":[]}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":161,"character":4},"end":{"line":161,"character":13}}}},{"text":"#(doc) Division the home team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":102}}}}],"blockNotes":[]}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":13}}}},{"text":"#(doc) Conference the home team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":166,"character":4},"end":{"line":166,"character":148}}}}],"blockNotes":[]}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":154,"character":4},"end":{"line":154,"character":47}}}}],"blockNotes":[]}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the home team scored in each period, as a comma-separated list in order, for example 7,10,0,14 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":172,"character":4},"end":{"line":172,"character":136}}}}],"blockNotes":[]}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the home team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":169,"character":4},"end":{"line":169,"character":89}}}}],"blockNotes":[]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":181,"character":4},"end":{"line":181,"character":99}}}}],"blockNotes":[]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the home team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the away value to sum to 1 and is not the result itself — a team can lose a game it was 90% likely to win. Matches the actual winner in about 90% of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":175,"character":4},"end":{"line":175,"character":293}}}}],"blockNotes":[]}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":178,"character":4},"end":{"line":178,"character":106}}}}],"blockNotes":[]}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":157,"character":4},"end":{"line":157,"character":13}}}},{"text":"#(doc) Name of the home team, for example Alabama or Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":158,"character":4},"end":{"line":158,"character":69}}}}],"blockNotes":[]}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the game. Join key to the drives data, whose GameId column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":116,"character":4},"end":{"line":116,"character":114}}}}],"blockNotes":[]}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game was played at a neutral venue rather than either team's own stadium. Bowl games, playoff games and kickoff classics are typically neutral site.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":138,"character":4},"end":{"line":138,"character":174}}}}],"blockNotes":[]}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Free-text note about the game, usually the name of a kickoff event or a special circumstance, for example Aer Lingus College Football Classic.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":220,"character":4},"end":{"line":220,"character":154}}}}],"blockNotes":[]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the away team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":244,"character":4},"end":{"line":244,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":247,"character":4},"end":{"line":247,"character":13}}}},{"text":"#(doc) Bowl the playoff game was hosted by, for example Rose Bowl, Sugar Bowl or College Football Playoff National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":248,"character":4},"end":{"line":248,"character":133}}}}],"blockNotes":[]}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Slot the game occupies in the playoff bracket, for example QF1 for the first quarterfinal or CH for the championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":238,"character":4},"end":{"line":238,"character":129}}}}],"blockNotes":[]}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":223,"character":4},"end":{"line":223,"character":13}}}},{"text":"#(doc) Postseason competition the game belongs to. cfp for the College Football Playoff; missing for regular-season and ordinary bowl games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":224,"character":4},"end":{"line":224,"character":145}}}}],"blockNotes":[]}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff bracket format in force for the season, for example twelve_team_2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":227,"character":4},"end":{"line":227,"character":89}}}}],"blockNotes":[]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the home team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":241,"character":4},"end":{"line":241,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":230,"character":4},"end":{"line":230,"character":13}}}},{"text":"#(doc) Playoff round in machine form: first_round, quarterfinal, semifinal or championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":231,"character":4},"end":{"line":231,"character":96}}}}],"blockNotes":[]}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":234,"character":4},"end":{"line":234,"character":13}}}},{"text":"#(doc) Playoff round in readable form: First Round, Quarterfinal, Semifinal or National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":235,"character":4},"end":{"line":235,"character":106}}}}],"blockNotes":[]}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Season year the game belongs to: 2025 or 2026. A season's bowls and playoff games played in January still belong to the season that started in August.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":119,"character":4},"end":{"line":119,"character":162}}}}],"blockNotes":[]}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":13}}}},{"text":"#(doc) Portion of the season: regular for the regular season, postseason for bowls and College Football Playoff games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":126,"character":4},"end":{"line":126,"character":123}}}}],"blockNotes":[]}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Scheduled kickoff date and time, expressed in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":129,"character":4},"end":{"line":129,"character":80}}}}],"blockNotes":[]}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the kickoff time had not been announced yet, so only the date is meaningful.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":132,"character":4},"end":{"line":132,"character":98}}}}],"blockNotes":[]}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":150,"character":4},"end":{"line":150,"character":13}}}},{"text":"#(doc) Name of the stadium the game was played in, for example Bryant-Denny Stadium.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":151,"character":4},"end":{"line":151,"character":89}}}}],"blockNotes":[]}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the stadium the game was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":68}}}}],"blockNotes":[]}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Week of the season the game was played in, numbered within the season type. Regular-season weeks run 1 to 16; postseason bowl and playoff games carry their own week numbers.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":185}}}}],"blockNotes":[]}},{"name":"game_date","type":"date","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":259,"character":32}}},"e":{"node":"cast","dstType":{"type":"date"},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}},"safe":false,"srcType":{"type":"timestamp"}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}}]},"expressionType":"scalar","code":"StartDate::date","annotations":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}},{"name":"matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":262,"character":49}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"node":"stringLiteral","literal":" at "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":15},"end":{"line":262,"character":49}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(AwayTeam, ' at ', HomeTeam)","annotations":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}},{"name":"final_score","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":267,"character":93}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":11},"end":{"line":266,"character":93}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":11},"end":{"line":267,"character":93}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick concat(HomeTeam, ' ', HomePoints::string, ', ', AwayTeam, ' ', AwayPoints::string) when HomePoints >= AwayPoints\n      else concat(AwayTeam, ' ', AwayPoints::string, ', ', HomeTeam, ' ', HomePoints::string)","annotations":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}},{"name":"winner","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":273,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePoints > AwayPoints\n      pick AwayTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}},{"name":"loser","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":279,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}}}],"caseThen":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}]},"expressionType":"scalar","code":"pick AwayTeam when HomePoints > AwayPoints\n      pick HomeTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that lost the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":92}}}}]}},{"name":"home_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":282,"character":39}}},"e":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}]},"expressionType":"scalar","code":"HomePoints > AwayPoints","annotations":{"notes":[{"text":"#(doc) True when the home team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":40}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":285,"character":43}}},"e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints + AwayPoints","annotations":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}},{"name":"point_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":288,"character":43}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints - AwayPoints","annotations":{"notes":[{"text":"#(doc) Home points minus away points. Positive when the home team won, negative when the away team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":108}}}}]}},{"name":"victory_margin","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":291,"character":50}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":22},"end":{"line":291,"character":50}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(HomePoints - AwayPoints)","annotations":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}},{"name":"margin_bucket","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":298,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"8"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"16"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"27"}}}],"caseThen":[{"node":"stringLiteral","literal":"One-score game"},{"node":"stringLiteral","literal":"Two-score game"},{"node":"stringLiteral","literal":"Comfortable"}],"caseElse":{"node":"stringLiteral","literal":"Blowout"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":33},"end":{"line":295,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":33},"end":{"line":296,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":30},"end":{"line":297,"character":58}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'One-score game' when abs(HomePoints - AwayPoints) <= 8\n      pick 'Two-score game' when abs(HomePoints - AwayPoints) <= 16\n      pick 'Comfortable' when abs(HomePoints - AwayPoints) <= 27\n      else 'Blowout'","annotations":{"notes":[{"text":"#(doc) How close the game was: One-score game for a margin of 8 or less, Two-score game for 9 to 16, Comfortable for 17 to 27, and Blowout for 28 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":159}}}}]}},{"name":"classification_matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":301,"character":84}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"node":"stringLiteral","literal":" vs "},{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":30},"end":{"line":301,"character":84}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(HomeClassification, ' vs ', AwayClassification)","annotations":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}},{"name":"is_fbs_matchup","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":304,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},"right":{"node":"stringLiteral","literal":"fbs"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}},"right":{"node":"stringLiteral","literal":"fbs"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}}]},"expressionType":"scalar","code":"HomeClassification = 'fbs' and AwayClassification = 'fbs'","annotations":{"notes":[{"text":"#(doc) True when both teams are FBS programs, the top division of college football.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":303,"character":88}}}}]}},{"name":"is_playoff_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":307,"character":56}}},"e":{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}]},"expressionType":"scalar","code":"`Playoff Competition` is not null","annotations":{"notes":[{"text":"#(doc) True when the game is part of the College Football Playoff bracket.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":306,"character":79}}}}]}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":310,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}]},"expressionType":"scalar","code":"HomePregameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}},{"name":"elo_favorite","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":316,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePregameElo > AwayPregameElo\n      pick AwayTeam when AwayPregameElo > HomePregameElo\n      else null","annotations":{"notes":[{"text":"#(doc) Team the pregame Elo ratings favored, before any home-field adjustment.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":312,"character":83}}}}]}},{"name":"is_elo_upset","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":321,"character":70}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n      or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)","annotations":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}},{"name":"home_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":324,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}]},"expressionType":"scalar","code":"HomePostgameElo - HomePregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the home team gained from the game. Negative when the home team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":323,"character":109}}}}]}},{"name":"away_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":327,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}]},"expressionType":"scalar","code":"AwayPostgameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the away team gained from the game. Negative when the away team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":326,"character":109}}}}]}},{"name":"excitement_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":334,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},"right":{"node":"numberLiteral","literal":"8"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Competitive"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}}]},"expressionType":"scalar","code":"pick 'Instant classic' when ExcitementIndex > 8\n      pick 'Thriller' when ExcitementIndex > 6\n      pick 'Competitive' when ExcitementIndex > 4\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) How dramatic the game was, from its excitement rating: Instant classic above 8, Thriller above 6, Competitive above 4, and Routine at 4 or below.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":329,"character":157}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":340,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}}]},"expressionType":"scalar","code":"Season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":339,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":347,"character":42}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when SeasonType = 'postseason'\n      else concat('Week ', `Week`::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}},{"name":"week_sort","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":352,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"numberLiteral","literal":"100"}],"caseElse":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}]},"expressionType":"scalar","code":"pick 100 when SeasonType = 'postseason'\n      else `Week`","annotations":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}},{"name":"periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":363,"character":41}}},"e":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_periods_played","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}}]},"expressionType":"scalar","code":"calc_periods_played","annotations":{"notes":[{"text":"#(doc) Number of periods the game went, from the line score: 4 for regulation, 5 or more when it went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":362,"character":119}}}}]}},{"name":"is_overtime","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":366,"character":42}}},"e":{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},"right":{"node":"numberLiteral","literal":"4"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}}]},"expressionType":"scalar","code":"calc_periods_played > 4","annotations":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}},{"name":"home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":369,"character":59}}},"e":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_home_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three","annotations":{"notes":[{"text":"#(doc) Home team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":75}}}}]}},{"name":"away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":372,"character":59}}},"e":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_away_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}}]},"expressionType":"scalar","code":"calc_away_points_after_three","annotations":{"notes":[{"text":"#(doc) Away team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":371,"character":75}}}}]}},{"name":"margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":375,"character":49}}},"e":{"node":"field","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}},"drillExpression":{"kind":"field_reference","name":"calc_margin_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}}]},"expressionType":"scalar","code":"calc_margin_after_three","annotations":{"notes":[{"text":"#(doc) Home points minus away points going into the fourth quarter. Positive when the home team led.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":374,"character":105}}}}]}},{"name":"is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":378,"character":43}}},"e":{"node":"field","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_is_comeback_win","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}}]},"expressionType":"scalar","code":"calc_is_comeback_win","annotations":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}},{"name":"thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":400,"character":45}}},"e":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_closeness","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}}]},"expressionType":"scalar","code":"calc_thrill_closeness","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}},{"name":"thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":403,"character":47}}},"e":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_late_drama","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}}]},"expressionType":"scalar","code":"calc_thrill_late_drama","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}},{"name":"thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":406,"character":43}}},"e":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_comeback","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_comeback","annotations":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}},{"name":"thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":409,"character":43}}},"e":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_overtime","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_overtime","annotations":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}},{"name":"thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":412,"character":41}}},"e":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_scoring","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}}]},"expressionType":"scalar","code":"calc_thrill_scoring","annotations":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}},{"name":"thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":415,"character":37}}},"e":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_upset","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_upset","annotations":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}},{"name":"thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":418,"character":39}}},"e":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_stakes","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}}]},"expressionType":"scalar","code":"calc_thrill_stakes","annotations":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}},{"name":"thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":427,"character":37}}},"e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_index","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_index","annotations":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}},{"name":"thrill_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":435,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},"right":{"node":"numberLiteral","literal":"75"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},"right":{"node":"numberLiteral","literal":"55"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}},"right":{"node":"numberLiteral","literal":"35"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Good game"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}}]},"expressionType":"scalar","code":"pick null when calc_thrill_index is null\n      pick 'Instant classic' when calc_thrill_index >= 75\n      pick 'Thriller' when calc_thrill_index >= 55\n      pick 'Good game' when calc_thrill_index >= 35\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":25}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":441,"character":18},"end":{"line":441,"character":25}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}},{"name":"completed_game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":444,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":28},"end":{"line":444,"character":35}}}},"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: Completed }","annotations":{"notes":[{"text":"#(doc) Number of games that have been played and have a final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":443,"character":73}}}}]}},{"name":"points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":447,"character":54}}},"e":{"node":"+","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":21},"end":{"line":447,"character":36}}}},"right":{"node":"aggregate","function":"sum","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":39},"end":{"line":447,"character":54}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(HomePoints) + sum(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Total points scored by both teams across all games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":446,"character":63}}}}]}},{"name":"avg_total_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":450,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":24},"end":{"line":450,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(total_points)","annotations":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}},{"name":"avg_home_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":453,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":23},"end":{"line":453,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":452,"character":51}}}}]}},{"name":"avg_away_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":456,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":23},"end":{"line":456,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":455,"character":51}}}}]}},{"name":"avg_victory_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":459,"character":45}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":26},"end":{"line":459,"character":45}}}},"refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"avg(victory_margin)","annotations":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}},{"name":"home_win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":463,"character":119}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":21},"end":{"line":463,"character":28}}}},"filterList":[{"node":"filterCondition","code":"home_win","e":{"node":"field","path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":58},"end":{"line":463,"character":65}}}},"filterList":[{"node":"filterCondition","code":"Completed and HomePoints != AwayPoints","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":51},"end":{"line":463,"character":119}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: home_win } / nullif(count() { where: Completed and HomePoints != AwayPoints }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}},{"name":"one_score_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":467,"character":99}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":27},"end":{"line":467,"character":34}}}},"filterList":[{"node":"filterCondition","code":"victory_margin <= 8","e":{"node":"<=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},"right":{"node":"numberLiteral","literal":"8"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},{"path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":68},"end":{"line":467,"character":99}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: victory_margin <= 8 } / nullif(completed_game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games decided by 8 points or fewer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":465,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":466,"character":4},"end":{"line":466,"character":14}}}}]}},{"name":"blowout_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":470,"character":60}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":21},"end":{"line":470,"character":28}}}},"filterList":[{"node":"filterCondition","code":"victory_margin >= 28","e":{"node":">=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}},"right":{"node":"numberLiteral","literal":"28"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: victory_margin >= 28 }","annotations":{"notes":[{"text":"#(doc) Number of games decided by 28 points or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":469,"character":57}}}}]}},{"name":"upset_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":473,"character":50}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":19},"end":{"line":473,"character":26}}}},"filterList":[{"node":"filterCondition","code":"is_elo_upset","e":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"expressionType":"aggregate","code":"count() { where: is_elo_upset }","annotations":{"notes":[{"text":"#(doc) Number of games in which the team with the lower pregame Elo rating won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":472,"character":84}}}}]}},{"name":"total_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":476,"character":39}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":24},"end":{"line":476,"character":39}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Attendance)","annotations":{"notes":[{"text":"#(doc) Total announced attendance across all games that reported it, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":475,"character":84}}}}]}},{"name":"avg_attendance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":479,"character":37}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":22},"end":{"line":479,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(Attendance)","annotations":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}},{"name":"max_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":482,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":22},"end":{"line":482,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}}]},"expressionType":"aggregate","code":"max(Attendance)","annotations":{"notes":[{"text":"#(doc) Largest announced attendance for a single game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":481,"character":70}}}}]}},{"name":"avg_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":485,"character":42}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":22},"end":{"line":485,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}},{"name":"max_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":488,"character":42}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":22},"end":{"line":488,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}}]},"expressionType":"aggregate","code":"max(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Highest excitement rating of any game in the group.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":487,"character":63}}}}]}},{"name":"avg_thrill_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(thrill_index)","annotations":{"notes":[{"text":"#(doc) Average thrill index across completed games, 0 to 100.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":66}}}}]}},{"name":"neutral_site_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":495,"character":79}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":25},"end":{"line":495,"character":32}}}},"filterList":[{"node":"filterCondition","code":"NeutralSite","e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":58},"end":{"line":495,"character":79}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: NeutralSite } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played at a neutral venue.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":53}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":494,"character":4},"end":{"line":494,"character":14}}}}]}},{"name":"conference_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":499,"character":85}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":28},"end":{"line":499,"character":35}}}},"filterList":[{"node":"filterCondition","code":"ConferenceGame","e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":64},"end":{"line":499,"character":85}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: ConferenceGame } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played between teams from the same conference.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":497,"character":73}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":498,"character":4},"end":{"line":498,"character":14}}}}]}},{"name":"avg_home_pregame_elo","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":502,"character":47}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":28},"end":{"line":502,"character":47}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePregameElo)","annotations":{"notes":[{"text":"#(doc) Average pregame Elo rating of the home team. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":501,"character":101}}}}]}},{"name":"home_team_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":505,"character":38}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":23},"end":{"line":505,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}}]},"expressionType":"aggregate","code":"count(HomeTeam)","annotations":{"notes":[{"text":"#(doc) Number of distinct teams appearing as the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":504,"character":64}}}}]}},{"name":"has_drive_detail","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":40,"character":64}}},"e":{"node":">","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"field","path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":24},"end":{"line":40,"character":60}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"coalesce(drive_counts.drive_rows, 0) > 0","annotations":{"notes":[{"text":"#(doc) True when this game has drive-by-drive detail, so a drive chart can be drawn. Division I games have it; Division II and III games do not.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":149}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":33}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":45,"character":19},"end":{"line":45,"character":33}}},"structPath":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives"],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"drives.count()","annotations":{"notes":[{"text":"#(doc) Number of drives (possessions) played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":50}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":47}}},"e":{"node":"field","path":["drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":48,"character":24},"end":{"line":48,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":48,"character":24},"end":{"line":48,"character":47}}}}]},"expressionType":"aggregate","code":"drives.points_per_drive","annotations":{"notes":[{"text":"#(doc) Average points scored per possession by both teams combined.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":72}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":50,"character":4},"end":{"line":52,"character":51}}},"e":{"node":"field","path":["drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":52,"character":26},"end":{"line":52,"character":51}}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":52,"character":26},"end":{"line":52,"character":51}}}}]},"expressionType":"aggregate","code":"drives.three_and_out_rate","annotations":{"notes":[{"text":"#(doc) Share of possessions that ended in a three-and-out punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":68}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":14}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-74cbb1e9-9a69-4a13-95c6-15837a02c316","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-74cbb1e9-9a69-4a13-95c6-15837a02c316","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-5aa5d528-977c-40dc-af92-c7628b32c635","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":56}}},"parameters":{},"as":"drives","annotations":{"blockNotes":[{"text":"#(doc) Every drive played in this game, one row per possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":66}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":38},"end":{"line":32,"character":40}}}},"right":{"node":"field","path":["drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":43},"end":{"line":32,"character":56}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":38},"end":{"line":32,"character":40}}}},{"path":["drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":43},"end":{"line":32,"character":56}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]}},{"name":"drive_rows","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":27},"end":{"line":20,"character":34}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"name":"drive_rows","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}}}],"primaryKey":"GameId"},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_rows","dir":"desc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":18,"character":29},"end":{"line":21,"character":1}}},"givenUsage":[]},"name":"QuerySource-6f7e328f-ef04-49ff-9a0d-f0eb3b0b8bfe","as":"drive_counts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":12},"end":{"line":35,"character":73}}},"annotations":{"blockNotes":[{"text":"#(doc) How many drives the feed has for this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":34,"character":2},"end":{"line":34,"character":53}}}}]},"fields":[{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"name":"drive_rows","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"GameId","dialect":"duckdb","sourceID":"game_drive_counts@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","persistent":false,"referenceID":"game_drive_counts@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":49},"end":{"line":35,"character":51}}}},"right":{"node":"field","path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":49},"end":{"line":35,"character":51}}}},{"path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}]}},{"type":"turtle","name":"by_week","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}},"drillExpression":{"kind":"field_reference","name":"SeasonType","path":[]}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}},"drillExpression":{"kind":"field_reference","name":"Week","path":[]}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_excitement","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"avg_excitement","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"SeasonType"},{"field":"Week"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}}},{"path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games per week with scoring, margins and excitement, in schedule order. Answers how the season's weeks compare.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":509,"character":2},"end":{"line":509,"character":121}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":510,"character":8},"end":{"line":514,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}}]},"expressionType":"scalar","code":"HomeConference"},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"drillExpression":{"kind":"field_reference","name":"home_win_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"type":"fieldref","path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"drillExpression":{"kind":"field_reference","name":"avg_attendance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"home_win_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"name":"avg_attendance","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"HomeConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}}},{"path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}}},{"path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Volume and scoring of games by the home team's conference, busiest conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":516,"character":2},"end":{"line":516,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":517,"character":8},"end":{"line":522,"character":3}}}},{"type":"turtle","name":"by_classification","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"drillExpression":{"kind":"field_reference","name":"classification_matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"classification_matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"primaryKey":"classification_matchup"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games by division matchup, for example FBS against FCS, showing how lopsided each type of matchup is.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":524,"character":2},"end":{"line":524,"character":111}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":525,"character":8},"end":{"line":529,"character":3}}}},{"type":"turtle","name":"most_exciting_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]},"isRepeated":true,"orderBy":[{"field":"ExcitementIndex","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The wildest finishes of the season, ranked by excitement rating.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":531,"character":2},"end":{"line":531,"character":74}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":532,"character":8},"end":{"line":537,"character":3}}}},{"type":"turtle","name":"biggest_blowouts","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"victory_margin","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The most lopsided results of the season, ranked by winning margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":539,"character":2},"end":{"line":539,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":540,"character":8},"end":{"line":545,"character":3}}}},{"type":"turtle","name":"highest_scoring_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"total_points","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The highest-scoring games of the season, ranked by combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":547,"character":2},"end":{"line":547,"character":77}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":548,"character":8},"end":{"line":553,"character":3}}}},{"type":"turtle","name":"best_attended_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]}},{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]},"isRepeated":true,"orderBy":[{"field":"Attendance","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Attendance is not null","e":{"node":"is-not-null","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Best-attended games of the season, ranked by announced attendance.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":555,"character":2},"end":{"line":555,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":556,"character":8},"end":{"line":561,"character":3}}}},{"type":"turtle","name":"biggest_upsets","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"drillExpression":{"kind":"field_reference","name":"winner","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}},"e":{"node":"aggregate","function":"max","e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"field","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}}]},"expressionType":"scalar"},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":26},"end":{"line":567,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"max(abs(pregame_elo_edge))"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"winner","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}}}]},"isRepeated":true,"orderBy":[{"field":"elo_gap","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed and is_elo_upset","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},"right":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}}},{"path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games won by the team the pregame Elo ratings rated lower, biggest rating gap first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":563,"character":2},"end":{"line":563,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":564,"character":8},"end":{"line":570,"character":3}}}},{"type":"turtle","name":"playoff_bracket","pipeline":[{"type":"reduce","queryFields":[{"name":"round_name","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"name":"bracket_slot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}},"e":{"node":"field","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BracketSlot","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}}]},"expressionType":"scalar","code":"`Playoff BracketSlot`"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"round_name","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}}},{"name":"bracket_slot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}}},{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"bracket_slot"}],"filterList":[{"node":"filterCondition","code":"is_playoff_game","e":{"node":"field","path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The College Football Playoff bracket in round order, with each game's result.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":572,"character":2},"end":{"line":572,"character":87}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":573,"character":8},"end":{"line":583,"character":3}}}},{"type":"turtle","name":"scoring_trend","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"primaryKey":"game_date"},"isRepeated":true,"orderBy":[{"field":"game_date"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Season shape week by week: how many games are played and how many points are scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":585,"character":2},"end":{"line":585,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":586,"character":8},"end":{"line":590,"character":3}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"Id","dialect":"duckdb","persistent":false,"extends":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","sourceID":"games@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","referenceID":"games@file:///Users/timolsen/cfb-data/cfb-games/index.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":85,"character":12},"end":{"line":85,"character":22}}},"drillExpression":{"kind":"field_reference","name":"week_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}}},{"type":"fieldref","path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":85,"character":24},"end":{"line":85,"character":33}}},"drillExpression":{"kind":"field_reference","name":"week_sort","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"week_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":85,"character":12},"end":{"line":85,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}}},{"name":"week_sort","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":85,"character":24},"end":{"line":85,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"week_sort"}],"filterList":[{"node":"filterCondition","code":"season_label ~ $SEASON","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"SEASON","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":24},"end":{"line":84,"character":31}}}},"expr":{"node":"field","path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":9},"end":{"line":84,"character":21}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":9},"end":{"line":84,"character":21}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":24},"end":{"line":84,"character":31}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":9},"end":{"line":84,"character":21}}}},{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":85,"character":12},"end":{"line":85,"character":22}}}},{"path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":85,"character":24},"end":{"line":85,"character":33}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":24},"end":{"line":84,"character":31}}}}]},"expandedFieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":9},"end":{"line":84,"character":21}}}},{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":85,"character":12},"end":{"line":85,"character":22}}}},{"path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":85,"character":24},"end":{"line":85,"character":33}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}}],"expandedGivenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":24},"end":{"line":84,"character":31}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":83,"character":7},"end":{"line":87,"character":1}}},"name":"week_suggest","annotations":{"blockNotes":[{"text":"#(doc) Weeks of the chosen season in calendar order, the postseason last. Feeds the week picker.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":97}}}}]},"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":84,"character":24},"end":{"line":84,"character":31}}}}],"as":"week_suggest"},"DRIVE_GAMES":{"type":"given","name":"DRIVE_GAMES","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy"},"games_2025":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_games","dialect":"duckdb","tablePath":"cfb_games","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Week","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"SeasonType","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartDate","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartTimeTBD","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"NeutralSite","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ConferenceGame","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"VenueId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ExcitementIndex","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Highlights","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Competition","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Format","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff RoundName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BracketSlot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BowlName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"calc_periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":96}}},"e":{"node":"+","kids":{"left":{"node":"-","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"pattern","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"replacement","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}}}},"name":"replace","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"node":"stringLiteral","literal":","},{"node":"stringLiteral","literal":""}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"length(HomeLineScores) - length(replace(HomeLineScores, ',', '')) + 1"},{"name":"calc_home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":46,"character":4},"end":{"line":50,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when HomeLineScores is null\n      else coalesce(split_part!string(HomeLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 3):::number, 0)"},{"name":"calc_away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":52,"character":4},"end":{"line":56,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when AwayLineScores is null\n      else coalesce(split_part!string(AwayLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 3):::number, 0)"}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":8},"end":{"line":28,"character":46}}},"parameters":{},"as":"games_raw","annotations":{"blockNotes":[{"text":"#(doc) Every game of every season in the feed, one row per game, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":27,"character":0},"end":{"line":27,"character":95}}}}]},"arguments":{}},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]},"expandedFieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":23},"end":{"line":57,"character":18}}},"givenUsage":[]},"name":"QuerySource-e0f39ecd-b3af-4c83-a468-3a689230bbc4","as":"games_lines","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":8},"end":{"line":57,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with the line score parsed: periods played and each team's points through three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":41,"character":0},"end":{"line":41,"character":103}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":90}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}}},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three - calc_away_points_after_three"},{"name":"calc_is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":98}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n      or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":86}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"35"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"28.0"}}}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"35 * greatest(0, 1 - abs(HomePoints - AwayPoints) / 28.0)"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":112}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"20"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"17.0"}}}}}]},"expressionType":"scalar"}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"coalesce(20 * greatest(0, 1 - abs(calc_home_points_after_three - calc_away_points_after_three) / 17.0), 0)"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":73,"character":4},"end":{"line":77,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}}}}}}}}],"caseThen":[{"node":"numberLiteral","literal":"10"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}]},"expressionType":"scalar","code":"pick 10 when\n        (HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n        or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)\n      else 0"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":71}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"15"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}}]},"expressionType":"scalar","code":"pick 15 when calc_periods_played > 4 else 0"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"12"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}}}}},"right":{"node":"numberLiteral","literal":"80.0"}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"12 * least(1, (HomePoints + AwayPoints) / 80.0)"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":83,"character":4},"end":{"line":87,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}}}}}}}}],"caseThen":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"10"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"250.0"}}}]},"expressionType":"scalar"}}}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expressionType":"scalar","code":"pick 10 * least(1, abs(HomePregameElo - AwayPregameElo) / 250.0) when\n        (HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n        or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)\n      else 0"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":4},"end":{"line":89,"character":78}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}}],"caseThen":[{"node":"numberLiteral","literal":"8"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}]},"expressionType":"scalar","code":"pick 8 when `Playoff Competition` is not null else 0"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_lines@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expandedFieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":30},"end":{"line":90,"character":18}}},"givenUsage":[]},"name":"QuerySource-1ea131a2-7726-479c-963d-cd2b115ef20f","as":"games_thrill_parts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":8},"end":{"line":90,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with each part of the thrill index as its own column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":59,"character":0},"end":{"line":59,"character":67}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":95,"character":4},"end":{"line":100,"character":8}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"not","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}}},"right":{"node":"is-null","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}}}}},"right":{"node":"is-null","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND((",")::NUMERIC)"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}}}},"name":"round","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"100"},{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},"right":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}}}},"right":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}}}},"right":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}}}},"right":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}}}},"right":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}}}},"right":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}}}}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when not Completed or HomePoints is null or AwayPoints is null\n      else round(least(100,\n        calc_thrill_closeness + calc_thrill_late_drama + calc_thrill_comeback + calc_thrill_overtime\n        + calc_thrill_scoring + calc_thrill_upset + calc_thrill_stakes\n      ))"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_thrill_parts@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expandedFieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":93,"character":24},"end":{"line":101,"character":18}}},"givenUsage":[]},"name":"QuerySource-c0c33cdd-caa7-48f1-9793-0dd2459b17c7","as":"games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":29,"character":8},"end":{"line":53,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per college football game in the 2025 and 2026 seasons, with every drive of that\ngame joined in. Carries the final score, line score, venue, conferences, Elo, CFBD's\nexcitement rating and a box-score thrill index, plus drive-level totals. Use it for\nschedules, results, the most exciting games, and game summaries.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":23,"character":0},"end":{"line":28,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per college football game in the 2025 and 2026 seasons, across every division: FBS, FCS, Division II\nand Division III. Each game carries the final score, venue and announced attendance,\nthe conference and division of both teams, pregame and postgame Elo ratings, postgame\nwin probability, an excitement rating, and College Football Playoff bracket details\nfor playoff games. Use it for schedules, results, margins, attendance, rankings-style\nElo movement, and as the game-level context for drive-by-drive data, which joins on\ngame id.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":103,"character":0},"end":{"line":111,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) Games with the thrill index itself as a column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":92,"character":0},"end":{"line":92,"character":55}}}}]}}},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Announced attendance for the game, in people. Missing for many games, especially at the Division II and Division III level.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":144,"character":4},"end":{"line":144,"character":135}}}}],"blockNotes":[]}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":191,"character":4},"end":{"line":191,"character":13}}}},{"text":"#(doc) Division the away team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":192,"character":4},"end":{"line":192,"character":102}}}}],"blockNotes":[]}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":195,"character":4},"end":{"line":195,"character":13}}}},{"text":"#(doc) Conference the away team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":196,"character":4},"end":{"line":196,"character":148}}}}],"blockNotes":[]}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":184,"character":4},"end":{"line":184,"character":47}}}}],"blockNotes":[]}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the away team scored in each period, as a comma-separated list in order, for example 3,7,7,0 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":134}}}}],"blockNotes":[]}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the away team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":89}}}}],"blockNotes":[]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":99}}}}],"blockNotes":[]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the away team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the home value to sum to 1 and is not the result itself.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":194}}}}],"blockNotes":[]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":106}}}}],"blockNotes":[]}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":187,"character":4},"end":{"line":187,"character":13}}}},{"text":"#(doc) Name of the away team, for example Michigan or Texas.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":188,"character":4},"end":{"line":188,"character":65}}}}],"blockNotes":[]}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game has been played and the final score is official.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":135,"character":4},"end":{"line":135,"character":79}}}}],"blockNotes":[]}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when both teams belong to the same conference, so the result counts in the conference standings.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":141,"character":4},"end":{"line":141,"character":113}}}}],"blockNotes":[]}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Excitement rating for the game, built from how much and how often the win probability swung. Typical games rate near 4; the wildest finishes rate above 8.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":214,"character":4},"end":{"line":214,"character":166}}}}],"blockNotes":[]}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Link to the game's video highlights, when one is published.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":217,"character":4},"end":{"line":217,"character":71}}}}],"blockNotes":[]}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":161,"character":4},"end":{"line":161,"character":13}}}},{"text":"#(doc) Division the home team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":102}}}}],"blockNotes":[]}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":13}}}},{"text":"#(doc) Conference the home team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":166,"character":4},"end":{"line":166,"character":148}}}}],"blockNotes":[]}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":154,"character":4},"end":{"line":154,"character":47}}}}],"blockNotes":[]}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the home team scored in each period, as a comma-separated list in order, for example 7,10,0,14 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":172,"character":4},"end":{"line":172,"character":136}}}}],"blockNotes":[]}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the home team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":169,"character":4},"end":{"line":169,"character":89}}}}],"blockNotes":[]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":181,"character":4},"end":{"line":181,"character":99}}}}],"blockNotes":[]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the home team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the away value to sum to 1 and is not the result itself — a team can lose a game it was 90% likely to win. Matches the actual winner in about 90% of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":175,"character":4},"end":{"line":175,"character":293}}}}],"blockNotes":[]}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":178,"character":4},"end":{"line":178,"character":106}}}}],"blockNotes":[]}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":157,"character":4},"end":{"line":157,"character":13}}}},{"text":"#(doc) Name of the home team, for example Alabama or Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":158,"character":4},"end":{"line":158,"character":69}}}}],"blockNotes":[]}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the game. Join key to the drives data, whose GameId column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":116,"character":4},"end":{"line":116,"character":114}}}}],"blockNotes":[]}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game was played at a neutral venue rather than either team's own stadium. Bowl games, playoff games and kickoff classics are typically neutral site.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":138,"character":4},"end":{"line":138,"character":174}}}}],"blockNotes":[]}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Free-text note about the game, usually the name of a kickoff event or a special circumstance, for example Aer Lingus College Football Classic.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":220,"character":4},"end":{"line":220,"character":154}}}}],"blockNotes":[]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the away team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":244,"character":4},"end":{"line":244,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":247,"character":4},"end":{"line":247,"character":13}}}},{"text":"#(doc) Bowl the playoff game was hosted by, for example Rose Bowl, Sugar Bowl or College Football Playoff National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":248,"character":4},"end":{"line":248,"character":133}}}}],"blockNotes":[]}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Slot the game occupies in the playoff bracket, for example QF1 for the first quarterfinal or CH for the championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":238,"character":4},"end":{"line":238,"character":129}}}}],"blockNotes":[]}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":223,"character":4},"end":{"line":223,"character":13}}}},{"text":"#(doc) Postseason competition the game belongs to. cfp for the College Football Playoff; missing for regular-season and ordinary bowl games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":224,"character":4},"end":{"line":224,"character":145}}}}],"blockNotes":[]}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff bracket format in force for the season, for example twelve_team_2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":227,"character":4},"end":{"line":227,"character":89}}}}],"blockNotes":[]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the home team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":241,"character":4},"end":{"line":241,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":230,"character":4},"end":{"line":230,"character":13}}}},{"text":"#(doc) Playoff round in machine form: first_round, quarterfinal, semifinal or championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":231,"character":4},"end":{"line":231,"character":96}}}}],"blockNotes":[]}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":234,"character":4},"end":{"line":234,"character":13}}}},{"text":"#(doc) Playoff round in readable form: First Round, Quarterfinal, Semifinal or National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":235,"character":4},"end":{"line":235,"character":106}}}}],"blockNotes":[]}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Season year the game belongs to: 2025 or 2026. A season's bowls and playoff games played in January still belong to the season that started in August.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":119,"character":4},"end":{"line":119,"character":162}}}}],"blockNotes":[]}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":13}}}},{"text":"#(doc) Portion of the season: regular for the regular season, postseason for bowls and College Football Playoff games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":126,"character":4},"end":{"line":126,"character":123}}}}],"blockNotes":[]}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Scheduled kickoff date and time, expressed in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":129,"character":4},"end":{"line":129,"character":80}}}}],"blockNotes":[]}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the kickoff time had not been announced yet, so only the date is meaningful.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":132,"character":4},"end":{"line":132,"character":98}}}}],"blockNotes":[]}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":150,"character":4},"end":{"line":150,"character":13}}}},{"text":"#(doc) Name of the stadium the game was played in, for example Bryant-Denny Stadium.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":151,"character":4},"end":{"line":151,"character":89}}}}],"blockNotes":[]}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the stadium the game was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":68}}}}],"blockNotes":[]}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Week of the season the game was played in, numbered within the season type. Regular-season weeks run 1 to 16; postseason bowl and playoff games carry their own week numbers.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":185}}}}],"blockNotes":[]}},{"name":"game_date","type":"date","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":259,"character":32}}},"e":{"node":"cast","dstType":{"type":"date"},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}},"safe":false,"srcType":{"type":"timestamp"}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}}]},"expressionType":"scalar","code":"StartDate::date","annotations":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}},{"name":"matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":262,"character":49}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"node":"stringLiteral","literal":" at "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":15},"end":{"line":262,"character":49}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(AwayTeam, ' at ', HomeTeam)","annotations":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}},{"name":"final_score","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":267,"character":93}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":11},"end":{"line":266,"character":93}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":11},"end":{"line":267,"character":93}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick concat(HomeTeam, ' ', HomePoints::string, ', ', AwayTeam, ' ', AwayPoints::string) when HomePoints >= AwayPoints\n      else concat(AwayTeam, ' ', AwayPoints::string, ', ', HomeTeam, ' ', HomePoints::string)","annotations":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}},{"name":"winner","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":273,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePoints > AwayPoints\n      pick AwayTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}},{"name":"loser","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":279,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}}}],"caseThen":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}]},"expressionType":"scalar","code":"pick AwayTeam when HomePoints > AwayPoints\n      pick HomeTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that lost the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":92}}}}]}},{"name":"home_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":282,"character":39}}},"e":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}]},"expressionType":"scalar","code":"HomePoints > AwayPoints","annotations":{"notes":[{"text":"#(doc) True when the home team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":40}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":285,"character":43}}},"e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints + AwayPoints","annotations":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}},{"name":"point_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":288,"character":43}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints - AwayPoints","annotations":{"notes":[{"text":"#(doc) Home points minus away points. Positive when the home team won, negative when the away team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":108}}}}]}},{"name":"victory_margin","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":291,"character":50}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":22},"end":{"line":291,"character":50}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(HomePoints - AwayPoints)","annotations":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}},{"name":"margin_bucket","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":298,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"8"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"16"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"27"}}}],"caseThen":[{"node":"stringLiteral","literal":"One-score game"},{"node":"stringLiteral","literal":"Two-score game"},{"node":"stringLiteral","literal":"Comfortable"}],"caseElse":{"node":"stringLiteral","literal":"Blowout"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":33},"end":{"line":295,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":33},"end":{"line":296,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":30},"end":{"line":297,"character":58}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'One-score game' when abs(HomePoints - AwayPoints) <= 8\n      pick 'Two-score game' when abs(HomePoints - AwayPoints) <= 16\n      pick 'Comfortable' when abs(HomePoints - AwayPoints) <= 27\n      else 'Blowout'","annotations":{"notes":[{"text":"#(doc) How close the game was: One-score game for a margin of 8 or less, Two-score game for 9 to 16, Comfortable for 17 to 27, and Blowout for 28 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":159}}}}]}},{"name":"classification_matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":301,"character":84}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"node":"stringLiteral","literal":" vs "},{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":30},"end":{"line":301,"character":84}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(HomeClassification, ' vs ', AwayClassification)","annotations":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}},{"name":"is_fbs_matchup","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":304,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},"right":{"node":"stringLiteral","literal":"fbs"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}},"right":{"node":"stringLiteral","literal":"fbs"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}}]},"expressionType":"scalar","code":"HomeClassification = 'fbs' and AwayClassification = 'fbs'","annotations":{"notes":[{"text":"#(doc) True when both teams are FBS programs, the top division of college football.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":303,"character":88}}}}]}},{"name":"is_playoff_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":307,"character":56}}},"e":{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}]},"expressionType":"scalar","code":"`Playoff Competition` is not null","annotations":{"notes":[{"text":"#(doc) True when the game is part of the College Football Playoff bracket.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":306,"character":79}}}}]}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":310,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}]},"expressionType":"scalar","code":"HomePregameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}},{"name":"elo_favorite","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":316,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePregameElo > AwayPregameElo\n      pick AwayTeam when AwayPregameElo > HomePregameElo\n      else null","annotations":{"notes":[{"text":"#(doc) Team the pregame Elo ratings favored, before any home-field adjustment.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":312,"character":83}}}}]}},{"name":"is_elo_upset","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":321,"character":70}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n      or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)","annotations":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}},{"name":"home_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":324,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}]},"expressionType":"scalar","code":"HomePostgameElo - HomePregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the home team gained from the game. Negative when the home team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":323,"character":109}}}}]}},{"name":"away_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":327,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}]},"expressionType":"scalar","code":"AwayPostgameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the away team gained from the game. Negative when the away team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":326,"character":109}}}}]}},{"name":"excitement_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":334,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},"right":{"node":"numberLiteral","literal":"8"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Competitive"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}}]},"expressionType":"scalar","code":"pick 'Instant classic' when ExcitementIndex > 8\n      pick 'Thriller' when ExcitementIndex > 6\n      pick 'Competitive' when ExcitementIndex > 4\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) How dramatic the game was, from its excitement rating: Instant classic above 8, Thriller above 6, Competitive above 4, and Routine at 4 or below.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":329,"character":157}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":340,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}}]},"expressionType":"scalar","code":"Season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":339,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":347,"character":42}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when SeasonType = 'postseason'\n      else concat('Week ', `Week`::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}},{"name":"week_sort","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":352,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"numberLiteral","literal":"100"}],"caseElse":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}]},"expressionType":"scalar","code":"pick 100 when SeasonType = 'postseason'\n      else `Week`","annotations":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}},{"name":"periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":363,"character":41}}},"e":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_periods_played","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}}]},"expressionType":"scalar","code":"calc_periods_played","annotations":{"notes":[{"text":"#(doc) Number of periods the game went, from the line score: 4 for regulation, 5 or more when it went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":362,"character":119}}}}]}},{"name":"is_overtime","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":366,"character":42}}},"e":{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},"right":{"node":"numberLiteral","literal":"4"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}}]},"expressionType":"scalar","code":"calc_periods_played > 4","annotations":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}},{"name":"home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":369,"character":59}}},"e":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_home_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three","annotations":{"notes":[{"text":"#(doc) Home team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":75}}}}]}},{"name":"away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":372,"character":59}}},"e":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_away_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}}]},"expressionType":"scalar","code":"calc_away_points_after_three","annotations":{"notes":[{"text":"#(doc) Away team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":371,"character":75}}}}]}},{"name":"margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":375,"character":49}}},"e":{"node":"field","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}},"drillExpression":{"kind":"field_reference","name":"calc_margin_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}}]},"expressionType":"scalar","code":"calc_margin_after_three","annotations":{"notes":[{"text":"#(doc) Home points minus away points going into the fourth quarter. Positive when the home team led.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":374,"character":105}}}}]}},{"name":"is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":378,"character":43}}},"e":{"node":"field","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_is_comeback_win","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}}]},"expressionType":"scalar","code":"calc_is_comeback_win","annotations":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}},{"name":"thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":400,"character":45}}},"e":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_closeness","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}}]},"expressionType":"scalar","code":"calc_thrill_closeness","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}},{"name":"thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":403,"character":47}}},"e":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_late_drama","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}}]},"expressionType":"scalar","code":"calc_thrill_late_drama","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}},{"name":"thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":406,"character":43}}},"e":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_comeback","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_comeback","annotations":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}},{"name":"thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":409,"character":43}}},"e":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_overtime","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_overtime","annotations":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}},{"name":"thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":412,"character":41}}},"e":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_scoring","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}}]},"expressionType":"scalar","code":"calc_thrill_scoring","annotations":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}},{"name":"thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":415,"character":37}}},"e":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_upset","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_upset","annotations":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}},{"name":"thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":418,"character":39}}},"e":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_stakes","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}}]},"expressionType":"scalar","code":"calc_thrill_stakes","annotations":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}},{"name":"thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":427,"character":37}}},"e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_index","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_index","annotations":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}},{"name":"thrill_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":435,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},"right":{"node":"numberLiteral","literal":"75"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},"right":{"node":"numberLiteral","literal":"55"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}},"right":{"node":"numberLiteral","literal":"35"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Good game"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}}]},"expressionType":"scalar","code":"pick null when calc_thrill_index is null\n      pick 'Instant classic' when calc_thrill_index >= 75\n      pick 'Thriller' when calc_thrill_index >= 55\n      pick 'Good game' when calc_thrill_index >= 35\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":25}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":441,"character":18},"end":{"line":441,"character":25}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}},{"name":"completed_game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":444,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":28},"end":{"line":444,"character":35}}}},"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: Completed }","annotations":{"notes":[{"text":"#(doc) Number of games that have been played and have a final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":443,"character":73}}}}]}},{"name":"points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":447,"character":54}}},"e":{"node":"+","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":21},"end":{"line":447,"character":36}}}},"right":{"node":"aggregate","function":"sum","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":39},"end":{"line":447,"character":54}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(HomePoints) + sum(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Total points scored by both teams across all games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":446,"character":63}}}}]}},{"name":"avg_total_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":450,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":24},"end":{"line":450,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(total_points)","annotations":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}},{"name":"avg_home_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":453,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":23},"end":{"line":453,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":452,"character":51}}}}]}},{"name":"avg_away_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":456,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":23},"end":{"line":456,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":455,"character":51}}}}]}},{"name":"avg_victory_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":459,"character":45}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":26},"end":{"line":459,"character":45}}}},"refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"avg(victory_margin)","annotations":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}},{"name":"home_win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":463,"character":119}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":21},"end":{"line":463,"character":28}}}},"filterList":[{"node":"filterCondition","code":"home_win","e":{"node":"field","path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":58},"end":{"line":463,"character":65}}}},"filterList":[{"node":"filterCondition","code":"Completed and HomePoints != AwayPoints","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":51},"end":{"line":463,"character":119}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: home_win } / nullif(count() { where: Completed and HomePoints != AwayPoints }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}},{"name":"one_score_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":467,"character":99}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":27},"end":{"line":467,"character":34}}}},"filterList":[{"node":"filterCondition","code":"victory_margin <= 8","e":{"node":"<=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},"right":{"node":"numberLiteral","literal":"8"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},{"path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":68},"end":{"line":467,"character":99}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: victory_margin <= 8 } / nullif(completed_game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games decided by 8 points or fewer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":465,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":466,"character":4},"end":{"line":466,"character":14}}}}]}},{"name":"blowout_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":470,"character":60}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":21},"end":{"line":470,"character":28}}}},"filterList":[{"node":"filterCondition","code":"victory_margin >= 28","e":{"node":">=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}},"right":{"node":"numberLiteral","literal":"28"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: victory_margin >= 28 }","annotations":{"notes":[{"text":"#(doc) Number of games decided by 28 points or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":469,"character":57}}}}]}},{"name":"upset_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":473,"character":50}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":19},"end":{"line":473,"character":26}}}},"filterList":[{"node":"filterCondition","code":"is_elo_upset","e":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"expressionType":"aggregate","code":"count() { where: is_elo_upset }","annotations":{"notes":[{"text":"#(doc) Number of games in which the team with the lower pregame Elo rating won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":472,"character":84}}}}]}},{"name":"total_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":476,"character":39}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":24},"end":{"line":476,"character":39}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Attendance)","annotations":{"notes":[{"text":"#(doc) Total announced attendance across all games that reported it, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":475,"character":84}}}}]}},{"name":"avg_attendance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":479,"character":37}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":22},"end":{"line":479,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(Attendance)","annotations":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}},{"name":"max_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":482,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":22},"end":{"line":482,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}}]},"expressionType":"aggregate","code":"max(Attendance)","annotations":{"notes":[{"text":"#(doc) Largest announced attendance for a single game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":481,"character":70}}}}]}},{"name":"avg_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":485,"character":42}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":22},"end":{"line":485,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}},{"name":"max_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":488,"character":42}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":22},"end":{"line":488,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}}]},"expressionType":"aggregate","code":"max(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Highest excitement rating of any game in the group.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":487,"character":63}}}}]}},{"name":"avg_thrill_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(thrill_index)","annotations":{"notes":[{"text":"#(doc) Average thrill index across completed games, 0 to 100.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":66}}}}]}},{"name":"neutral_site_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":495,"character":79}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":25},"end":{"line":495,"character":32}}}},"filterList":[{"node":"filterCondition","code":"NeutralSite","e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":58},"end":{"line":495,"character":79}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: NeutralSite } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played at a neutral venue.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":53}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":494,"character":4},"end":{"line":494,"character":14}}}}]}},{"name":"conference_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":499,"character":85}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":28},"end":{"line":499,"character":35}}}},"filterList":[{"node":"filterCondition","code":"ConferenceGame","e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":64},"end":{"line":499,"character":85}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: ConferenceGame } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played between teams from the same conference.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":497,"character":73}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":498,"character":4},"end":{"line":498,"character":14}}}}]}},{"name":"avg_home_pregame_elo","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":502,"character":47}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":28},"end":{"line":502,"character":47}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePregameElo)","annotations":{"notes":[{"text":"#(doc) Average pregame Elo rating of the home team. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":501,"character":101}}}}]}},{"name":"home_team_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":505,"character":38}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":23},"end":{"line":505,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}}]},"expressionType":"aggregate","code":"count(HomeTeam)","annotations":{"notes":[{"text":"#(doc) Number of distinct teams appearing as the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":504,"character":64}}}}]}},{"name":"has_drive_detail","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":40,"character":64}}},"e":{"node":">","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"field","path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":24},"end":{"line":40,"character":60}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"coalesce(drive_counts.drive_rows, 0) > 0","annotations":{"notes":[{"text":"#(doc) True when this game has drive-by-drive detail, so a drive chart can be drawn. Division I games have it; Division II and III games do not.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":149}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":33}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":45,"character":19},"end":{"line":45,"character":33}}},"structPath":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives"],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"drives.count()","annotations":{"notes":[{"text":"#(doc) Number of drives (possessions) played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":50}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":47}}},"e":{"node":"field","path":["drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":48,"character":24},"end":{"line":48,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":48,"character":24},"end":{"line":48,"character":47}}}}]},"expressionType":"aggregate","code":"drives.points_per_drive","annotations":{"notes":[{"text":"#(doc) Average points scored per possession by both teams combined.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":72}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":50,"character":4},"end":{"line":52,"character":51}}},"e":{"node":"field","path":["drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":52,"character":26},"end":{"line":52,"character":51}}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":52,"character":26},"end":{"line":52,"character":51}}}}]},"expressionType":"aggregate","code":"drives.three_and_out_rate","annotations":{"notes":[{"text":"#(doc) Share of possessions that ended in a three-and-out punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":68}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":14}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-a8834253-f060-45ac-b708-0e47ea75eb87","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-a8834253-f060-45ac-b708-0e47ea75eb87","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-73df9dfe-6b83-4dfb-979d-2f51a41a60b7","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":56}}},"parameters":{},"as":"drives","annotations":{"blockNotes":[{"text":"#(doc) Every drive played in this game, one row per possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":66}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":38},"end":{"line":32,"character":40}}}},"right":{"node":"field","path":["drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":43},"end":{"line":32,"character":56}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":38},"end":{"line":32,"character":40}}}},{"path":["drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":43},"end":{"line":32,"character":56}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]}},{"name":"drive_rows","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":27},"end":{"line":20,"character":34}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"name":"drive_rows","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}}}],"primaryKey":"GameId"},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_rows","dir":"desc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":18,"character":29},"end":{"line":21,"character":1}}},"givenUsage":[]},"name":"QuerySource-adc3e0b8-e07f-4a2d-b312-d425b08a8c83","as":"drive_counts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":12},"end":{"line":35,"character":73}}},"annotations":{"blockNotes":[{"text":"#(doc) How many drives the feed has for this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":34,"character":2},"end":{"line":34,"character":53}}}}]},"fields":[{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"name":"drive_rows","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"GameId","dialect":"duckdb","sourceID":"game_drive_counts@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","persistent":false,"referenceID":"game_drive_counts@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":49},"end":{"line":35,"character":51}}}},"right":{"node":"field","path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":49},"end":{"line":35,"character":51}}}},{"path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}]}},{"type":"turtle","name":"by_week","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}},"drillExpression":{"kind":"field_reference","name":"SeasonType","path":[]}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}},"drillExpression":{"kind":"field_reference","name":"Week","path":[]}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_excitement","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"avg_excitement","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"SeasonType"},{"field":"Week"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}}},{"path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games per week with scoring, margins and excitement, in schedule order. Answers how the season's weeks compare.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":509,"character":2},"end":{"line":509,"character":121}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":510,"character":8},"end":{"line":514,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}}]},"expressionType":"scalar","code":"HomeConference"},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"drillExpression":{"kind":"field_reference","name":"home_win_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"type":"fieldref","path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"drillExpression":{"kind":"field_reference","name":"avg_attendance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"home_win_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"name":"avg_attendance","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"HomeConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}}},{"path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}}},{"path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Volume and scoring of games by the home team's conference, busiest conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":516,"character":2},"end":{"line":516,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":517,"character":8},"end":{"line":522,"character":3}}}},{"type":"turtle","name":"by_classification","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"drillExpression":{"kind":"field_reference","name":"classification_matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"classification_matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"primaryKey":"classification_matchup"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games by division matchup, for example FBS against FCS, showing how lopsided each type of matchup is.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":524,"character":2},"end":{"line":524,"character":111}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":525,"character":8},"end":{"line":529,"character":3}}}},{"type":"turtle","name":"most_exciting_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]},"isRepeated":true,"orderBy":[{"field":"ExcitementIndex","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The wildest finishes of the season, ranked by excitement rating.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":531,"character":2},"end":{"line":531,"character":74}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":532,"character":8},"end":{"line":537,"character":3}}}},{"type":"turtle","name":"biggest_blowouts","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"victory_margin","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The most lopsided results of the season, ranked by winning margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":539,"character":2},"end":{"line":539,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":540,"character":8},"end":{"line":545,"character":3}}}},{"type":"turtle","name":"highest_scoring_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"total_points","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The highest-scoring games of the season, ranked by combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":547,"character":2},"end":{"line":547,"character":77}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":548,"character":8},"end":{"line":553,"character":3}}}},{"type":"turtle","name":"best_attended_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]}},{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]},"isRepeated":true,"orderBy":[{"field":"Attendance","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Attendance is not null","e":{"node":"is-not-null","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Best-attended games of the season, ranked by announced attendance.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":555,"character":2},"end":{"line":555,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":556,"character":8},"end":{"line":561,"character":3}}}},{"type":"turtle","name":"biggest_upsets","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"drillExpression":{"kind":"field_reference","name":"winner","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}},"e":{"node":"aggregate","function":"max","e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"field","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}}]},"expressionType":"scalar"},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":26},"end":{"line":567,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"max(abs(pregame_elo_edge))"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"winner","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}}}]},"isRepeated":true,"orderBy":[{"field":"elo_gap","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed and is_elo_upset","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},"right":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}}},{"path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games won by the team the pregame Elo ratings rated lower, biggest rating gap first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":563,"character":2},"end":{"line":563,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":564,"character":8},"end":{"line":570,"character":3}}}},{"type":"turtle","name":"playoff_bracket","pipeline":[{"type":"reduce","queryFields":[{"name":"round_name","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"name":"bracket_slot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}},"e":{"node":"field","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BracketSlot","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}}]},"expressionType":"scalar","code":"`Playoff BracketSlot`"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"round_name","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}}},{"name":"bracket_slot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}}},{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"bracket_slot"}],"filterList":[{"node":"filterCondition","code":"is_playoff_game","e":{"node":"field","path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The College Football Playoff bracket in round order, with each game's result.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":572,"character":2},"end":{"line":572,"character":87}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":573,"character":8},"end":{"line":583,"character":3}}}},{"type":"turtle","name":"scoring_trend","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"primaryKey":"game_date"},"isRepeated":true,"orderBy":[{"field":"game_date"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Season shape week by week: how many games are played and how many points are scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":585,"character":2},"end":{"line":585,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":586,"character":8},"end":{"line":590,"character":3}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"Id","dialect":"duckdb","persistent":false,"extends":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","sourceID":"games@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","referenceID":"games@file:///Users/timolsen/cfb-data/cfb-games/index.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":38,"character":4},"end":{"line":38,"character":17}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":38,"character":15},"end":{"line":38,"character":17}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":38,"character":15},"end":{"line":38,"character":17}}}}]},"expressionType":"scalar","code":"Id"},{"name":"season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":20}}},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":39,"character":14},"end":{"line":39,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Season","path":[]},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":39,"character":14},"end":{"line":39,"character":20}}}}]},"expressionType":"scalar","code":"Season"},{"type":"fieldref","path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":40,"character":4},"end":{"line":40,"character":14}}},"drillExpression":{"kind":"field_reference","name":"week_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}}},{"type":"fieldref","path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":41,"character":4},"end":{"line":41,"character":13}}},"drillExpression":{"kind":"field_reference","name":"week_sort","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}}},{"name":"start_date","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":42,"character":4},"end":{"line":42,"character":27}}},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":42,"character":18},"end":{"line":42,"character":27}}}},"drillExpression":{"kind":"field_reference","name":"StartDate","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":42,"character":18},"end":{"line":42,"character":27}}}}]},"expressionType":"scalar","code":"StartDate"},{"name":"start_time_tbd","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":43,"character":4},"end":{"line":43,"character":34}}},"e":{"node":"field","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":43,"character":22},"end":{"line":43,"character":34}}}},"drillExpression":{"kind":"field_reference","name":"StartTimeTBD","path":[]},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":43,"character":22},"end":{"line":43,"character":34}}}}]},"expressionType":"scalar","code":"StartTimeTBD"},{"name":"completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":26}}},"e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":44,"character":17},"end":{"line":44,"character":26}}}},"drillExpression":{"kind":"field_reference","name":"Completed","path":[]},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":44,"character":17},"end":{"line":44,"character":26}}}}]},"expressionType":"scalar","code":"Completed"},{"name":"neutral_site","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":45,"character":4},"end":{"line":45,"character":31}}},"e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":45,"character":20},"end":{"line":45,"character":31}}}},"drillExpression":{"kind":"field_reference","name":"NeutralSite","path":[]},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":45,"character":20},"end":{"line":45,"character":31}}}}]},"expressionType":"scalar","code":"NeutralSite"},{"name":"conference_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":46,"character":4},"end":{"line":46,"character":37}}},"e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":46,"character":23},"end":{"line":46,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"ConferenceGame","path":[]},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":46,"character":23},"end":{"line":46,"character":37}}}}]},"expressionType":"scalar","code":"ConferenceGame"},{"name":"venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":18}}},"e":{"node":"field","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":47,"character":13},"end":{"line":47,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":47,"character":13},"end":{"line":47,"character":18}}}}]},"expressionType":"scalar","code":"Venue"},{"name":"attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":48,"character":4},"end":{"line":48,"character":28}}},"e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":48,"character":18},"end":{"line":48,"character":28}}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":48,"character":18},"end":{"line":48,"character":28}}}}]},"expressionType":"scalar","code":"Attendance"},{"name":"notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":49,"character":4},"end":{"line":49,"character":18}}},"e":{"node":"field","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":49,"character":13},"end":{"line":49,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Notes","path":[]},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":49,"character":13},"end":{"line":49,"character":18}}}}]},"expressionType":"scalar","code":"Notes"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":30}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":50,"character":12},"end":{"line":50,"character":30}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":50,"character":12},"end":{"line":50,"character":30}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"name":"playoff_round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":40}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":40}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":40}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"type":"fieldref","path":["has_drive_detail"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":20}}},"drillExpression":{"kind":"field_reference","name":"has_drive_detail","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when this game has drive-by-drive detail, so a drive chart can be drawn. Division I games have it; Division II and III games do not.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":149}}}}]}}},{"name":"away_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":25}}},"e":{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":55,"character":17},"end":{"line":55,"character":25}}}},"drillExpression":{"kind":"field_reference","name":"AwayTeam","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":55,"character":17},"end":{"line":55,"character":25}}}}]},"expressionType":"scalar","code":"AwayTeam"},{"name":"away_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":56,"character":4},"end":{"line":56,"character":37}}},"e":{"node":"field","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":56,"character":23},"end":{"line":56,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"AwayConference","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":56,"character":23},"end":{"line":56,"character":37}}}}]},"expressionType":"scalar","code":"AwayConference"},{"name":"away_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":57,"character":4},"end":{"line":57,"character":45}}},"e":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":57,"character":27},"end":{"line":57,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"AwayClassification","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":57,"character":27},"end":{"line":57,"character":45}}}}]},"expressionType":"scalar","code":"AwayClassification"},{"name":"away_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":29}}},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":58,"character":19},"end":{"line":58,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"AwayPoints","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":58,"character":19},"end":{"line":58,"character":29}}}}]},"expressionType":"scalar","code":"AwayPoints"},{"name":"away_line_scores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":59,"character":4},"end":{"line":59,"character":38}}},"e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":59,"character":24},"end":{"line":59,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"AwayLineScores","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":59,"character":24},"end":{"line":59,"character":38}}}}]},"expressionType":"scalar","code":"AwayLineScores"},{"name":"away_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":60,"character":4},"end":{"line":60,"character":38}}},"e":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":60,"character":24},"end":{"line":60,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"AwayPregameElo","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":60,"character":24},"end":{"line":60,"character":38}}}}]},"expressionType":"scalar","code":"AwayPregameElo"},{"name":"away_seed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":35}}},"e":{"node":"field","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":61,"character":17},"end":{"line":61,"character":35}}}},"drillExpression":{"kind":"field_reference","name":"Playoff AwaySeed","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":61,"character":17},"end":{"line":61,"character":35}}}}]},"expressionType":"scalar","code":"`Playoff AwaySeed`"},{"name":"home_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":25}}},"e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":62,"character":17},"end":{"line":62,"character":25}}}},"drillExpression":{"kind":"field_reference","name":"HomeTeam","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":62,"character":17},"end":{"line":62,"character":25}}}}]},"expressionType":"scalar","code":"HomeTeam"},{"name":"home_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":63,"character":4},"end":{"line":63,"character":37}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":63,"character":23},"end":{"line":63,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":63,"character":23},"end":{"line":63,"character":37}}}}]},"expressionType":"scalar","code":"HomeConference"},{"name":"home_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":45}}},"e":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":64,"character":27},"end":{"line":64,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"HomeClassification","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":64,"character":27},"end":{"line":64,"character":45}}}}]},"expressionType":"scalar","code":"HomeClassification"},{"name":"home_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":29}}},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":65,"character":19},"end":{"line":65,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"HomePoints","path":[]},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":65,"character":19},"end":{"line":65,"character":29}}}}]},"expressionType":"scalar","code":"HomePoints"},{"name":"home_line_scores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":66,"character":4},"end":{"line":66,"character":38}}},"e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":66,"character":24},"end":{"line":66,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"HomeLineScores","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":66,"character":24},"end":{"line":66,"character":38}}}}]},"expressionType":"scalar","code":"HomeLineScores"},{"name":"home_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":67,"character":4},"end":{"line":67,"character":38}}},"e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":67,"character":24},"end":{"line":67,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"HomePregameElo","path":[]},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":67,"character":24},"end":{"line":67,"character":38}}}}]},"expressionType":"scalar","code":"HomePregameElo"},{"name":"home_seed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":35}}},"e":{"node":"field","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":68,"character":17},"end":{"line":68,"character":35}}}},"drillExpression":{"kind":"field_reference","name":"Playoff HomeSeed","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":68,"character":17},"end":{"line":68,"character":35}}}}]},"expressionType":"scalar","code":"`Playoff HomeSeed`"},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":18}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":16}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}},{"type":"fieldref","path":["is_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":15}}},"drillExpression":{"kind":"field_reference","name":"is_overtime","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}}},{"type":"fieldref","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":16}}},"drillExpression":{"kind":"field_reference","name":"is_elo_upset","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}}},{"type":"fieldref","path":["is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":19}}},"drillExpression":{"kind":"field_reference","name":"is_comeback_win","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}}},{"type":"fieldref","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":20}}},"drillExpression":{"kind":"field_reference","name":"pregame_elo_edge","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}}},{"name":"excitement_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":39}}},"e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":39}}}}]},"expressionType":"scalar","code":"ExcitementIndex"},{"type":"fieldref","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":78,"character":4},"end":{"line":78,"character":16}}},"drillExpression":{"kind":"field_reference","name":"thrill_index","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["thrill_tier"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":15}}},"drillExpression":{"kind":"field_reference","name":"thrill_tier","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}}},{"type":"fieldref","path":["thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":20}}},"drillExpression":{"kind":"field_reference","name":"thrill_closeness","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}}},{"type":"fieldref","path":["thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":21}}},"drillExpression":{"kind":"field_reference","name":"thrill_late_drama","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}}},{"type":"fieldref","path":["thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":19}}},"drillExpression":{"kind":"field_reference","name":"thrill_comeback","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}}},{"type":"fieldref","path":["thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":19}}},"drillExpression":{"kind":"field_reference","name":"thrill_overtime","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}}},{"type":"fieldref","path":["thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":18}}},"drillExpression":{"kind":"field_reference","name":"thrill_scoring","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}}},{"type":"fieldref","path":["thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":85,"character":4},"end":{"line":85,"character":16}}},"drillExpression":{"kind":"field_reference","name":"thrill_upset","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}}},{"type":"fieldref","path":["thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":86,"character":4},"end":{"line":86,"character":17}}},"drillExpression":{"kind":"field_reference","name":"thrill_stakes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":38,"character":4},"end":{"line":38,"character":17}}}},{"name":"season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":20}}}},{"name":"week_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":40,"character":4},"end":{"line":40,"character":14}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}}},{"name":"week_sort","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":41,"character":4},"end":{"line":41,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}}},{"name":"start_date","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":42,"character":4},"end":{"line":42,"character":27}}}},{"name":"start_time_tbd","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":43,"character":4},"end":{"line":43,"character":34}}}},{"name":"completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":26}}}},{"name":"neutral_site","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":45,"character":4},"end":{"line":45,"character":31}}}},{"name":"conference_game","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":46,"character":4},"end":{"line":46,"character":37}}}},{"name":"venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":18}}}},{"name":"attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":48,"character":4},"end":{"line":48,"character":28}}}},{"name":"notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":49,"character":4},"end":{"line":49,"character":18}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":30}}}},{"name":"playoff_round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":40}}}},{"name":"has_drive_detail","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":20}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when this game has drive-by-drive detail, so a drive chart can be drawn. Division I games have it; Division II and III games do not.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":149}}}}]}}},{"name":"away_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":25}}}},{"name":"away_conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":56,"character":4},"end":{"line":56,"character":37}}}},{"name":"away_classification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":57,"character":4},"end":{"line":57,"character":45}}}},{"name":"away_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":29}}}},{"name":"away_line_scores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":59,"character":4},"end":{"line":59,"character":38}}}},{"name":"away_pregame_elo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":60,"character":4},"end":{"line":60,"character":38}}}},{"name":"away_seed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":35}}}},{"name":"home_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":25}}}},{"name":"home_conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":63,"character":4},"end":{"line":63,"character":37}}}},{"name":"home_classification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":45}}}},{"name":"home_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":29}}}},{"name":"home_line_scores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":66,"character":4},"end":{"line":66,"character":38}}}},{"name":"home_pregame_elo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":67,"character":4},"end":{"line":67,"character":38}}}},{"name":"home_seed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":35}}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":18}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}},{"name":"is_overtime","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}}},{"name":"is_elo_upset","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}}},{"name":"is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":20}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}}},{"name":"excitement_index","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":39}}}},{"name":"thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":78,"character":4},"end":{"line":78,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}}},{"name":"thrill_tier","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}}},{"name":"thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":20}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}}},{"name":"thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}}},{"name":"thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}}},{"name":"thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}}},{"name":"thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":18}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}}},{"name":"thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":85,"character":4},"end":{"line":85,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}}},{"name":"thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":86,"character":4},"end":{"line":86,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"start_date"},{"field":"game_id"}],"filterList":[{"node":"filterCondition","code":"Season = 2025","e":{"node":"=","kids":{"left":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":27,"character":4},"end":{"line":27,"character":10}}}},"right":{"node":"numberLiteral","literal":"2025"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":27,"character":4},"end":{"line":27,"character":10}}}}]},"stableFilter":{"kind":"literal_equality","expression":{"kind":"field_reference","name":"Season","path":[]},"value":{"kind":"number_literal","number_value":2025}},"isSourceFilter":false},{"node":"filterCondition","code":"season_label ~ $SEASON","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"SEASON","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}},"expr":{"node":"field","path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":16}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":16}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"HomeTeam ~ $TEAM or AwayTeam ~ $TEAM","e":{"node":"or","kids":{"left":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"TEAM","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},"expr":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":4},"end":{"line":31,"character":12}}}}}},"right":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"TEAM","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":35},"end":{"line":31,"character":40}}}},"expr":{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":24},"end":{"line":31,"character":32}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":4},"end":{"line":31,"character":12}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":24},"end":{"line":31,"character":32}}}}],"givenUsage":[{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":35},"end":{"line":31,"character":40}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"HomeConference ~ $CONFERENCE or AwayConference ~ $CONFERENCE","e":{"node":"or","kids":{"left":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"CONFERENCE","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},"expr":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":4},"end":{"line":32,"character":18}}}}}},"right":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"CONFERENCE","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":53},"end":{"line":32,"character":64}}}},"expr":{"node":"field","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":36},"end":{"line":32,"character":50}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":4},"end":{"line":32,"character":18}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":36},"end":{"line":32,"character":50}}}}],"givenUsage":[{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":53},"end":{"line":32,"character":64}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"HomeClassification ~ $DIVISION or AwayClassification ~ $DIVISION","e":{"node":"or","kids":{"left":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"DIVISION","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},"expr":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":4},"end":{"line":33,"character":22}}}}}},"right":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"DIVISION","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":59},"end":{"line":33,"character":68}}}},"expr":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":38},"end":{"line":33,"character":56}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":4},"end":{"line":33,"character":22}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":38},"end":{"line":33,"character":56}}}}],"givenUsage":[{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":59},"end":{"line":33,"character":68}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"week_label ~ $GAME_WEEK","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"GAME_WEEK","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}},"expr":{"node":"field","path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":4},"end":{"line":34,"character":14}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":4},"end":{"line":34,"character":14}}}}],"givenUsage":[{"id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":27,"character":4},"end":{"line":27,"character":10}}}},{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":16}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":4},"end":{"line":31,"character":12}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":24},"end":{"line":31,"character":32}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":4},"end":{"line":32,"character":18}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":36},"end":{"line":32,"character":50}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":4},"end":{"line":33,"character":22}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":38},"end":{"line":33,"character":56}}}},{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":4},"end":{"line":34,"character":14}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":38,"character":15},"end":{"line":38,"character":17}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":39,"character":14},"end":{"line":39,"character":20}}}},{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":40,"character":4},"end":{"line":40,"character":14}}}},{"path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":41,"character":4},"end":{"line":41,"character":13}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":42,"character":18},"end":{"line":42,"character":27}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":43,"character":22},"end":{"line":43,"character":34}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":44,"character":17},"end":{"line":44,"character":26}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":45,"character":20},"end":{"line":45,"character":31}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":46,"character":23},"end":{"line":46,"character":37}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":47,"character":13},"end":{"line":47,"character":18}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":48,"character":18},"end":{"line":48,"character":28}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":49,"character":13},"end":{"line":49,"character":18}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":50,"character":12},"end":{"line":50,"character":30}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":40}}}},{"path":["has_drive_detail"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":20}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":55,"character":17},"end":{"line":55,"character":25}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":56,"character":23},"end":{"line":56,"character":37}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":57,"character":27},"end":{"line":57,"character":45}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":58,"character":19},"end":{"line":58,"character":29}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":59,"character":24},"end":{"line":59,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":60,"character":24},"end":{"line":60,"character":38}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":61,"character":17},"end":{"line":61,"character":35}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":62,"character":17},"end":{"line":62,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":63,"character":23},"end":{"line":63,"character":37}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":64,"character":27},"end":{"line":64,"character":45}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":65,"character":19},"end":{"line":65,"character":29}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":66,"character":24},"end":{"line":66,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":67,"character":24},"end":{"line":67,"character":38}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":68,"character":17},"end":{"line":68,"character":35}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":18}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":16}}}},{"path":["is_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":15}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":16}}}},{"path":["is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":19}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":20}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":39}}}},{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":78,"character":4},"end":{"line":78,"character":16}}}},{"path":["thrill_tier"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":15}}}},{"path":["thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":20}}}},{"path":["thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":21}}}},{"path":["thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":19}}}},{"path":["thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":19}}}},{"path":["thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":18}}}},{"path":["thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":85,"character":4},"end":{"line":85,"character":16}}}},{"path":["thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":86,"character":4},"end":{"line":86,"character":17}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":35},"end":{"line":31,"character":40}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":53},"end":{"line":32,"character":64}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":59},"end":{"line":33,"character":68}}}},{"id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}}]},"expandedFieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":27,"character":4},"end":{"line":27,"character":10}}}},{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":16}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":4},"end":{"line":31,"character":12}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":24},"end":{"line":31,"character":32}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":4},"end":{"line":32,"character":18}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":36},"end":{"line":32,"character":50}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":4},"end":{"line":33,"character":22}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":38},"end":{"line":33,"character":56}}}},{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":4},"end":{"line":34,"character":14}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":38,"character":15},"end":{"line":38,"character":17}}}},{"path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":41,"character":4},"end":{"line":41,"character":13}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":42,"character":18},"end":{"line":42,"character":27}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":43,"character":22},"end":{"line":43,"character":34}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":44,"character":17},"end":{"line":44,"character":26}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":45,"character":20},"end":{"line":45,"character":31}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":46,"character":23},"end":{"line":46,"character":37}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":47,"character":13},"end":{"line":47,"character":18}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":48,"character":18},"end":{"line":48,"character":28}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":49,"character":13},"end":{"line":49,"character":18}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":50,"character":12},"end":{"line":50,"character":30}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":40}}}},{"path":["has_drive_detail"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":20}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":58,"character":19},"end":{"line":58,"character":29}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":59,"character":24},"end":{"line":59,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":60,"character":24},"end":{"line":60,"character":38}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":61,"character":17},"end":{"line":61,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":65,"character":19},"end":{"line":65,"character":29}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":66,"character":24},"end":{"line":66,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":67,"character":24},"end":{"line":67,"character":38}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":68,"character":17},"end":{"line":68,"character":35}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":18}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":16}}}},{"path":["is_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":15}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":16}}}},{"path":["is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":19}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":20}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":39}}}},{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":78,"character":4},"end":{"line":78,"character":16}}}},{"path":["thrill_tier"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":15}}}},{"path":["thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":20}}}},{"path":["thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":21}}}},{"path":["thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":19}}}},{"path":["thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":19}}}},{"path":["thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":18}}}},{"path":["thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":85,"character":4},"end":{"line":85,"character":16}}}},{"path":["thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":86,"character":4},"end":{"line":86,"character":17}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},{"path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}],"expandedGivenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},{"id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}}],"activeJoins":[{"path":["drive_counts"]}],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":25,"character":7},"end":{"line":89,"character":1}}},"name":"games_2025","annotations":{"blockNotes":[{"text":"#\" Every game of the 2025 season — filter by team, conference or week, and sort by kickoff or by how exciting it was.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":20,"character":0},"end":{"line":20,"character":118}}}},{"text":"# artifact { title=\"2025 Games\" givens { SEASON='2025' } }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":21,"character":0},"end":{"line":21,"character":59}}}}]},"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},{"id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}}],"as":"games_2025"},"games_2026":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_games","dialect":"duckdb","tablePath":"cfb_games","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Week","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"SeasonType","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartDate","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartTimeTBD","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"NeutralSite","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ConferenceGame","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"VenueId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ExcitementIndex","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Highlights","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Competition","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Format","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff RoundName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BracketSlot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BowlName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"calc_periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":96}}},"e":{"node":"+","kids":{"left":{"node":"-","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"pattern","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"replacement","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}}}},"name":"replace","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"node":"stringLiteral","literal":","},{"node":"stringLiteral","literal":""}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"length(HomeLineScores) - length(replace(HomeLineScores, ',', '')) + 1"},{"name":"calc_home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":46,"character":4},"end":{"line":50,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when HomeLineScores is null\n      else coalesce(split_part!string(HomeLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 3):::number, 0)"},{"name":"calc_away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":52,"character":4},"end":{"line":56,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when AwayLineScores is null\n      else coalesce(split_part!string(AwayLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 3):::number, 0)"}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":8},"end":{"line":28,"character":46}}},"parameters":{},"as":"games_raw","annotations":{"blockNotes":[{"text":"#(doc) Every game of every season in the feed, one row per game, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":27,"character":0},"end":{"line":27,"character":95}}}}]},"arguments":{}},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]},"expandedFieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":23},"end":{"line":57,"character":18}}},"givenUsage":[]},"name":"QuerySource-73aabea7-a667-4049-9501-876b5331ee0b","as":"games_lines","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":8},"end":{"line":57,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with the line score parsed: periods played and each team's points through three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":41,"character":0},"end":{"line":41,"character":103}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":90}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}}},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three - calc_away_points_after_three"},{"name":"calc_is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":98}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n      or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":86}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"35"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"28.0"}}}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"35 * greatest(0, 1 - abs(HomePoints - AwayPoints) / 28.0)"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":112}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"20"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"17.0"}}}}}]},"expressionType":"scalar"}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"coalesce(20 * greatest(0, 1 - abs(calc_home_points_after_three - calc_away_points_after_three) / 17.0), 0)"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":73,"character":4},"end":{"line":77,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}}}}}}}}],"caseThen":[{"node":"numberLiteral","literal":"10"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}]},"expressionType":"scalar","code":"pick 10 when\n        (HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n        or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)\n      else 0"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":71}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"15"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}}]},"expressionType":"scalar","code":"pick 15 when calc_periods_played > 4 else 0"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"12"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}}}}},"right":{"node":"numberLiteral","literal":"80.0"}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"12 * least(1, (HomePoints + AwayPoints) / 80.0)"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":83,"character":4},"end":{"line":87,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}}}}}}}}],"caseThen":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"10"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"250.0"}}}]},"expressionType":"scalar"}}}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expressionType":"scalar","code":"pick 10 * least(1, abs(HomePregameElo - AwayPregameElo) / 250.0) when\n        (HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n        or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)\n      else 0"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":4},"end":{"line":89,"character":78}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}}],"caseThen":[{"node":"numberLiteral","literal":"8"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}]},"expressionType":"scalar","code":"pick 8 when `Playoff Competition` is not null else 0"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_lines@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expandedFieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":30},"end":{"line":90,"character":18}}},"givenUsage":[]},"name":"QuerySource-d2374ffa-0fdc-4b9a-b5ea-0b3d41983144","as":"games_thrill_parts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":8},"end":{"line":90,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with each part of the thrill index as its own column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":59,"character":0},"end":{"line":59,"character":67}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":95,"character":4},"end":{"line":100,"character":8}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"not","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}}},"right":{"node":"is-null","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}}}}},"right":{"node":"is-null","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND((",")::NUMERIC)"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}}}},"name":"round","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"100"},{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},"right":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}}}},"right":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}}}},"right":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}}}},"right":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}}}},"right":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}}}},"right":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}}}}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when not Completed or HomePoints is null or AwayPoints is null\n      else round(least(100,\n        calc_thrill_closeness + calc_thrill_late_drama + calc_thrill_comeback + calc_thrill_overtime\n        + calc_thrill_scoring + calc_thrill_upset + calc_thrill_stakes\n      ))"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_thrill_parts@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expandedFieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":93,"character":24},"end":{"line":101,"character":18}}},"givenUsage":[]},"name":"QuerySource-6609d6e5-2024-40b8-b2d2-b2f6f9feb1ef","as":"games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":29,"character":8},"end":{"line":53,"character":1}}},"annotations":{"blockNotes":[{"text":"#|(doc)\nOne row per college football game in the 2025 and 2026 seasons, with every drive of that\ngame joined in. Carries the final score, line score, venue, conferences, Elo, CFBD's\nexcitement rating and a box-score thrill index, plus drive-level totals. Use it for\nschedules, results, the most exciting games, and game summaries.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":23,"character":0},"end":{"line":28,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per college football game in the 2025 and 2026 seasons, across every division: FBS, FCS, Division II\nand Division III. Each game carries the final score, venue and announced attendance,\nthe conference and division of both teams, pregame and postgame Elo ratings, postgame\nwin probability, an excitement rating, and College Football Playoff bracket details\nfor playoff games. Use it for schedules, results, margins, attendance, rankings-style\nElo movement, and as the game-level context for drive-by-drive data, which joins on\ngame id.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":103,"character":0},"end":{"line":111,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) Games with the thrill index itself as a column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":92,"character":0},"end":{"line":92,"character":55}}}}]}}},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Announced attendance for the game, in people. Missing for many games, especially at the Division II and Division III level.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":144,"character":4},"end":{"line":144,"character":135}}}}],"blockNotes":[]}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":191,"character":4},"end":{"line":191,"character":13}}}},{"text":"#(doc) Division the away team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":192,"character":4},"end":{"line":192,"character":102}}}}],"blockNotes":[]}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":195,"character":4},"end":{"line":195,"character":13}}}},{"text":"#(doc) Conference the away team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":196,"character":4},"end":{"line":196,"character":148}}}}],"blockNotes":[]}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":184,"character":4},"end":{"line":184,"character":47}}}}],"blockNotes":[]}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the away team scored in each period, as a comma-separated list in order, for example 3,7,7,0 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":134}}}}],"blockNotes":[]}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the away team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":89}}}}],"blockNotes":[]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":99}}}}],"blockNotes":[]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the away team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the home value to sum to 1 and is not the result itself.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":194}}}}],"blockNotes":[]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":106}}}}],"blockNotes":[]}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":187,"character":4},"end":{"line":187,"character":13}}}},{"text":"#(doc) Name of the away team, for example Michigan or Texas.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":188,"character":4},"end":{"line":188,"character":65}}}}],"blockNotes":[]}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game has been played and the final score is official.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":135,"character":4},"end":{"line":135,"character":79}}}}],"blockNotes":[]}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when both teams belong to the same conference, so the result counts in the conference standings.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":141,"character":4},"end":{"line":141,"character":113}}}}],"blockNotes":[]}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Excitement rating for the game, built from how much and how often the win probability swung. Typical games rate near 4; the wildest finishes rate above 8.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":214,"character":4},"end":{"line":214,"character":166}}}}],"blockNotes":[]}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Link to the game's video highlights, when one is published.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":217,"character":4},"end":{"line":217,"character":71}}}}],"blockNotes":[]}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":161,"character":4},"end":{"line":161,"character":13}}}},{"text":"#(doc) Division the home team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":102}}}}],"blockNotes":[]}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":13}}}},{"text":"#(doc) Conference the home team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":166,"character":4},"end":{"line":166,"character":148}}}}],"blockNotes":[]}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":154,"character":4},"end":{"line":154,"character":47}}}}],"blockNotes":[]}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the home team scored in each period, as a comma-separated list in order, for example 7,10,0,14 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":172,"character":4},"end":{"line":172,"character":136}}}}],"blockNotes":[]}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the home team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":169,"character":4},"end":{"line":169,"character":89}}}}],"blockNotes":[]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":181,"character":4},"end":{"line":181,"character":99}}}}],"blockNotes":[]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the home team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the away value to sum to 1 and is not the result itself — a team can lose a game it was 90% likely to win. Matches the actual winner in about 90% of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":175,"character":4},"end":{"line":175,"character":293}}}}],"blockNotes":[]}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":178,"character":4},"end":{"line":178,"character":106}}}}],"blockNotes":[]}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":157,"character":4},"end":{"line":157,"character":13}}}},{"text":"#(doc) Name of the home team, for example Alabama or Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":158,"character":4},"end":{"line":158,"character":69}}}}],"blockNotes":[]}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the game. Join key to the drives data, whose GameId column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":116,"character":4},"end":{"line":116,"character":114}}}}],"blockNotes":[]}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game was played at a neutral venue rather than either team's own stadium. Bowl games, playoff games and kickoff classics are typically neutral site.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":138,"character":4},"end":{"line":138,"character":174}}}}],"blockNotes":[]}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Free-text note about the game, usually the name of a kickoff event or a special circumstance, for example Aer Lingus College Football Classic.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":220,"character":4},"end":{"line":220,"character":154}}}}],"blockNotes":[]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the away team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":244,"character":4},"end":{"line":244,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":247,"character":4},"end":{"line":247,"character":13}}}},{"text":"#(doc) Bowl the playoff game was hosted by, for example Rose Bowl, Sugar Bowl or College Football Playoff National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":248,"character":4},"end":{"line":248,"character":133}}}}],"blockNotes":[]}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Slot the game occupies in the playoff bracket, for example QF1 for the first quarterfinal or CH for the championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":238,"character":4},"end":{"line":238,"character":129}}}}],"blockNotes":[]}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":223,"character":4},"end":{"line":223,"character":13}}}},{"text":"#(doc) Postseason competition the game belongs to. cfp for the College Football Playoff; missing for regular-season and ordinary bowl games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":224,"character":4},"end":{"line":224,"character":145}}}}],"blockNotes":[]}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff bracket format in force for the season, for example twelve_team_2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":227,"character":4},"end":{"line":227,"character":89}}}}],"blockNotes":[]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the home team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":241,"character":4},"end":{"line":241,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":230,"character":4},"end":{"line":230,"character":13}}}},{"text":"#(doc) Playoff round in machine form: first_round, quarterfinal, semifinal or championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":231,"character":4},"end":{"line":231,"character":96}}}}],"blockNotes":[]}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":234,"character":4},"end":{"line":234,"character":13}}}},{"text":"#(doc) Playoff round in readable form: First Round, Quarterfinal, Semifinal or National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":235,"character":4},"end":{"line":235,"character":106}}}}],"blockNotes":[]}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Season year the game belongs to: 2025 or 2026. A season's bowls and playoff games played in January still belong to the season that started in August.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":119,"character":4},"end":{"line":119,"character":162}}}}],"blockNotes":[]}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":13}}}},{"text":"#(doc) Portion of the season: regular for the regular season, postseason for bowls and College Football Playoff games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":126,"character":4},"end":{"line":126,"character":123}}}}],"blockNotes":[]}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Scheduled kickoff date and time, expressed in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":129,"character":4},"end":{"line":129,"character":80}}}}],"blockNotes":[]}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the kickoff time had not been announced yet, so only the date is meaningful.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":132,"character":4},"end":{"line":132,"character":98}}}}],"blockNotes":[]}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":150,"character":4},"end":{"line":150,"character":13}}}},{"text":"#(doc) Name of the stadium the game was played in, for example Bryant-Denny Stadium.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":151,"character":4},"end":{"line":151,"character":89}}}}],"blockNotes":[]}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the stadium the game was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":68}}}}],"blockNotes":[]}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Week of the season the game was played in, numbered within the season type. Regular-season weeks run 1 to 16; postseason bowl and playoff games carry their own week numbers.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":185}}}}],"blockNotes":[]}},{"name":"game_date","type":"date","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":259,"character":32}}},"e":{"node":"cast","dstType":{"type":"date"},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}},"safe":false,"srcType":{"type":"timestamp"}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}}]},"expressionType":"scalar","code":"StartDate::date","annotations":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}},{"name":"matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":262,"character":49}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"node":"stringLiteral","literal":" at "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":15},"end":{"line":262,"character":49}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(AwayTeam, ' at ', HomeTeam)","annotations":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}},{"name":"final_score","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":267,"character":93}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":11},"end":{"line":266,"character":93}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":11},"end":{"line":267,"character":93}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick concat(HomeTeam, ' ', HomePoints::string, ', ', AwayTeam, ' ', AwayPoints::string) when HomePoints >= AwayPoints\n      else concat(AwayTeam, ' ', AwayPoints::string, ', ', HomeTeam, ' ', HomePoints::string)","annotations":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}},{"name":"winner","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":273,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePoints > AwayPoints\n      pick AwayTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}},{"name":"loser","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":279,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}}}],"caseThen":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}]},"expressionType":"scalar","code":"pick AwayTeam when HomePoints > AwayPoints\n      pick HomeTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that lost the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":92}}}}]}},{"name":"home_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":282,"character":39}}},"e":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}]},"expressionType":"scalar","code":"HomePoints > AwayPoints","annotations":{"notes":[{"text":"#(doc) True when the home team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":40}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":285,"character":43}}},"e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints + AwayPoints","annotations":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}},{"name":"point_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":288,"character":43}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints - AwayPoints","annotations":{"notes":[{"text":"#(doc) Home points minus away points. Positive when the home team won, negative when the away team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":108}}}}]}},{"name":"victory_margin","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":291,"character":50}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":22},"end":{"line":291,"character":50}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(HomePoints - AwayPoints)","annotations":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}},{"name":"margin_bucket","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":298,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"8"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"16"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"27"}}}],"caseThen":[{"node":"stringLiteral","literal":"One-score game"},{"node":"stringLiteral","literal":"Two-score game"},{"node":"stringLiteral","literal":"Comfortable"}],"caseElse":{"node":"stringLiteral","literal":"Blowout"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":33},"end":{"line":295,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":33},"end":{"line":296,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":30},"end":{"line":297,"character":58}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'One-score game' when abs(HomePoints - AwayPoints) <= 8\n      pick 'Two-score game' when abs(HomePoints - AwayPoints) <= 16\n      pick 'Comfortable' when abs(HomePoints - AwayPoints) <= 27\n      else 'Blowout'","annotations":{"notes":[{"text":"#(doc) How close the game was: One-score game for a margin of 8 or less, Two-score game for 9 to 16, Comfortable for 17 to 27, and Blowout for 28 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":159}}}}]}},{"name":"classification_matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":301,"character":84}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"node":"stringLiteral","literal":" vs "},{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":30},"end":{"line":301,"character":84}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(HomeClassification, ' vs ', AwayClassification)","annotations":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}},{"name":"is_fbs_matchup","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":304,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},"right":{"node":"stringLiteral","literal":"fbs"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}},"right":{"node":"stringLiteral","literal":"fbs"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}}]},"expressionType":"scalar","code":"HomeClassification = 'fbs' and AwayClassification = 'fbs'","annotations":{"notes":[{"text":"#(doc) True when both teams are FBS programs, the top division of college football.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":303,"character":88}}}}]}},{"name":"is_playoff_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":307,"character":56}}},"e":{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}]},"expressionType":"scalar","code":"`Playoff Competition` is not null","annotations":{"notes":[{"text":"#(doc) True when the game is part of the College Football Playoff bracket.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":306,"character":79}}}}]}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":310,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}]},"expressionType":"scalar","code":"HomePregameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}},{"name":"elo_favorite","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":316,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePregameElo > AwayPregameElo\n      pick AwayTeam when AwayPregameElo > HomePregameElo\n      else null","annotations":{"notes":[{"text":"#(doc) Team the pregame Elo ratings favored, before any home-field adjustment.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":312,"character":83}}}}]}},{"name":"is_elo_upset","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":321,"character":70}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n      or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)","annotations":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}},{"name":"home_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":324,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}]},"expressionType":"scalar","code":"HomePostgameElo - HomePregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the home team gained from the game. Negative when the home team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":323,"character":109}}}}]}},{"name":"away_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":327,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}]},"expressionType":"scalar","code":"AwayPostgameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the away team gained from the game. Negative when the away team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":326,"character":109}}}}]}},{"name":"excitement_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":334,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},"right":{"node":"numberLiteral","literal":"8"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Competitive"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}}]},"expressionType":"scalar","code":"pick 'Instant classic' when ExcitementIndex > 8\n      pick 'Thriller' when ExcitementIndex > 6\n      pick 'Competitive' when ExcitementIndex > 4\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) How dramatic the game was, from its excitement rating: Instant classic above 8, Thriller above 6, Competitive above 4, and Routine at 4 or below.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":329,"character":157}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":340,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}}]},"expressionType":"scalar","code":"Season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":339,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":347,"character":42}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when SeasonType = 'postseason'\n      else concat('Week ', `Week`::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}},{"name":"week_sort","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":352,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"numberLiteral","literal":"100"}],"caseElse":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}]},"expressionType":"scalar","code":"pick 100 when SeasonType = 'postseason'\n      else `Week`","annotations":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}},{"name":"periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":363,"character":41}}},"e":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_periods_played","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}}]},"expressionType":"scalar","code":"calc_periods_played","annotations":{"notes":[{"text":"#(doc) Number of periods the game went, from the line score: 4 for regulation, 5 or more when it went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":362,"character":119}}}}]}},{"name":"is_overtime","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":366,"character":42}}},"e":{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},"right":{"node":"numberLiteral","literal":"4"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}}]},"expressionType":"scalar","code":"calc_periods_played > 4","annotations":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}},{"name":"home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":369,"character":59}}},"e":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_home_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three","annotations":{"notes":[{"text":"#(doc) Home team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":75}}}}]}},{"name":"away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":372,"character":59}}},"e":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_away_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}}]},"expressionType":"scalar","code":"calc_away_points_after_three","annotations":{"notes":[{"text":"#(doc) Away team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":371,"character":75}}}}]}},{"name":"margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":375,"character":49}}},"e":{"node":"field","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}},"drillExpression":{"kind":"field_reference","name":"calc_margin_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}}]},"expressionType":"scalar","code":"calc_margin_after_three","annotations":{"notes":[{"text":"#(doc) Home points minus away points going into the fourth quarter. Positive when the home team led.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":374,"character":105}}}}]}},{"name":"is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":378,"character":43}}},"e":{"node":"field","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_is_comeback_win","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}}]},"expressionType":"scalar","code":"calc_is_comeback_win","annotations":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}},{"name":"thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":400,"character":45}}},"e":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_closeness","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}}]},"expressionType":"scalar","code":"calc_thrill_closeness","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}},{"name":"thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":403,"character":47}}},"e":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_late_drama","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}}]},"expressionType":"scalar","code":"calc_thrill_late_drama","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}},{"name":"thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":406,"character":43}}},"e":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_comeback","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_comeback","annotations":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}},{"name":"thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":409,"character":43}}},"e":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_overtime","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_overtime","annotations":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}},{"name":"thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":412,"character":41}}},"e":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_scoring","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}}]},"expressionType":"scalar","code":"calc_thrill_scoring","annotations":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}},{"name":"thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":415,"character":37}}},"e":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_upset","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_upset","annotations":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}},{"name":"thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":418,"character":39}}},"e":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_stakes","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}}]},"expressionType":"scalar","code":"calc_thrill_stakes","annotations":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}},{"name":"thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":427,"character":37}}},"e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_index","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_index","annotations":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}},{"name":"thrill_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":435,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},"right":{"node":"numberLiteral","literal":"75"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},"right":{"node":"numberLiteral","literal":"55"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}},"right":{"node":"numberLiteral","literal":"35"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Good game"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}}]},"expressionType":"scalar","code":"pick null when calc_thrill_index is null\n      pick 'Instant classic' when calc_thrill_index >= 75\n      pick 'Thriller' when calc_thrill_index >= 55\n      pick 'Good game' when calc_thrill_index >= 35\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":25}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":441,"character":18},"end":{"line":441,"character":25}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}},{"name":"completed_game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":444,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":28},"end":{"line":444,"character":35}}}},"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: Completed }","annotations":{"notes":[{"text":"#(doc) Number of games that have been played and have a final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":443,"character":73}}}}]}},{"name":"points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":447,"character":54}}},"e":{"node":"+","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":21},"end":{"line":447,"character":36}}}},"right":{"node":"aggregate","function":"sum","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":39},"end":{"line":447,"character":54}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(HomePoints) + sum(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Total points scored by both teams across all games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":446,"character":63}}}}]}},{"name":"avg_total_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":450,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":24},"end":{"line":450,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(total_points)","annotations":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}},{"name":"avg_home_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":453,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":23},"end":{"line":453,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":452,"character":51}}}}]}},{"name":"avg_away_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":456,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":23},"end":{"line":456,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":455,"character":51}}}}]}},{"name":"avg_victory_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":459,"character":45}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":26},"end":{"line":459,"character":45}}}},"refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"avg(victory_margin)","annotations":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}},{"name":"home_win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":463,"character":119}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":21},"end":{"line":463,"character":28}}}},"filterList":[{"node":"filterCondition","code":"home_win","e":{"node":"field","path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":58},"end":{"line":463,"character":65}}}},"filterList":[{"node":"filterCondition","code":"Completed and HomePoints != AwayPoints","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":51},"end":{"line":463,"character":119}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: home_win } / nullif(count() { where: Completed and HomePoints != AwayPoints }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}},{"name":"one_score_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":467,"character":99}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":27},"end":{"line":467,"character":34}}}},"filterList":[{"node":"filterCondition","code":"victory_margin <= 8","e":{"node":"<=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},"right":{"node":"numberLiteral","literal":"8"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},{"path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":68},"end":{"line":467,"character":99}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: victory_margin <= 8 } / nullif(completed_game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games decided by 8 points or fewer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":465,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":466,"character":4},"end":{"line":466,"character":14}}}}]}},{"name":"blowout_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":470,"character":60}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":21},"end":{"line":470,"character":28}}}},"filterList":[{"node":"filterCondition","code":"victory_margin >= 28","e":{"node":">=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}},"right":{"node":"numberLiteral","literal":"28"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: victory_margin >= 28 }","annotations":{"notes":[{"text":"#(doc) Number of games decided by 28 points or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":469,"character":57}}}}]}},{"name":"upset_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":473,"character":50}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":19},"end":{"line":473,"character":26}}}},"filterList":[{"node":"filterCondition","code":"is_elo_upset","e":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"expressionType":"aggregate","code":"count() { where: is_elo_upset }","annotations":{"notes":[{"text":"#(doc) Number of games in which the team with the lower pregame Elo rating won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":472,"character":84}}}}]}},{"name":"total_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":476,"character":39}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":24},"end":{"line":476,"character":39}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Attendance)","annotations":{"notes":[{"text":"#(doc) Total announced attendance across all games that reported it, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":475,"character":84}}}}]}},{"name":"avg_attendance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":479,"character":37}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":22},"end":{"line":479,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(Attendance)","annotations":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}},{"name":"max_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":482,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":22},"end":{"line":482,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}}]},"expressionType":"aggregate","code":"max(Attendance)","annotations":{"notes":[{"text":"#(doc) Largest announced attendance for a single game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":481,"character":70}}}}]}},{"name":"avg_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":485,"character":42}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":22},"end":{"line":485,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}},{"name":"max_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":488,"character":42}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":22},"end":{"line":488,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}}]},"expressionType":"aggregate","code":"max(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Highest excitement rating of any game in the group.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":487,"character":63}}}}]}},{"name":"avg_thrill_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(thrill_index)","annotations":{"notes":[{"text":"#(doc) Average thrill index across completed games, 0 to 100.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":66}}}}]}},{"name":"neutral_site_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":495,"character":79}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":25},"end":{"line":495,"character":32}}}},"filterList":[{"node":"filterCondition","code":"NeutralSite","e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":58},"end":{"line":495,"character":79}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: NeutralSite } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played at a neutral venue.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":53}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":494,"character":4},"end":{"line":494,"character":14}}}}]}},{"name":"conference_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":499,"character":85}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":28},"end":{"line":499,"character":35}}}},"filterList":[{"node":"filterCondition","code":"ConferenceGame","e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":64},"end":{"line":499,"character":85}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: ConferenceGame } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played between teams from the same conference.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":497,"character":73}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":498,"character":4},"end":{"line":498,"character":14}}}}]}},{"name":"avg_home_pregame_elo","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":502,"character":47}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":28},"end":{"line":502,"character":47}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePregameElo)","annotations":{"notes":[{"text":"#(doc) Average pregame Elo rating of the home team. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":501,"character":101}}}}]}},{"name":"home_team_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":505,"character":38}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":23},"end":{"line":505,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}}]},"expressionType":"aggregate","code":"count(HomeTeam)","annotations":{"notes":[{"text":"#(doc) Number of distinct teams appearing as the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":504,"character":64}}}}]}},{"name":"has_drive_detail","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":40,"character":64}}},"e":{"node":">","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"field","path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":24},"end":{"line":40,"character":60}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"coalesce(drive_counts.drive_rows, 0) > 0","annotations":{"notes":[{"text":"#(doc) True when this game has drive-by-drive detail, so a drive chart can be drawn. Division I games have it; Division II and III games do not.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":149}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":33}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":45,"character":19},"end":{"line":45,"character":33}}},"structPath":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives"],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"drives.count()","annotations":{"notes":[{"text":"#(doc) Number of drives (possessions) played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":50}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":47}}},"e":{"node":"field","path":["drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":48,"character":24},"end":{"line":48,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":48,"character":24},"end":{"line":48,"character":47}}}}]},"expressionType":"aggregate","code":"drives.points_per_drive","annotations":{"notes":[{"text":"#(doc) Average points scored per possession by both teams combined.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":72}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":50,"character":4},"end":{"line":52,"character":51}}},"e":{"node":"field","path":["drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":52,"character":26},"end":{"line":52,"character":51}}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":["drives"]},"refSummary":{"fieldUsage":[{"path":["drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":52,"character":26},"end":{"line":52,"character":51}}}}]},"expressionType":"aggregate","code":"drives.three_and_out_rate","annotations":{"notes":[{"text":"#(doc) Share of possessions that ended in a three-and-out punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":68}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":14}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-f6ec049e-cfb3-4b79-847c-c3f227edca1e","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-f6ec049e-cfb3-4b79-847c-c3f227edca1e","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-f4896baf-e474-4c8f-b496-5965adc875b8","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":56}}},"parameters":{},"as":"drives","annotations":{"blockNotes":[{"text":"#(doc) Every drive played in this game, one row per possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":66}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":38},"end":{"line":32,"character":40}}}},"right":{"node":"field","path":["drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":43},"end":{"line":32,"character":56}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":38},"end":{"line":32,"character":40}}}},{"path":["drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":32,"character":43},"end":{"line":32,"character":56}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]}},{"name":"drive_rows","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":27},"end":{"line":20,"character":34}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"name":"drive_rows","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}}}],"primaryKey":"GameId"},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_rows","dir":"desc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":18,"character":29},"end":{"line":21,"character":1}}},"givenUsage":[]},"name":"QuerySource-0accee49-ba60-47f4-b126-92ce77331048","as":"drive_counts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":12},"end":{"line":35,"character":73}}},"annotations":{"blockNotes":[{"text":"#(doc) How many drives the feed has for this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":34,"character":2},"end":{"line":34,"character":53}}}}]},"fields":[{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":19,"character":12},"end":{"line":19,"character":18}}}},{"name":"drive_rows","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":20,"character":13},"end":{"line":20,"character":34}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"GameId","dialect":"duckdb","sourceID":"game_drive_counts@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","persistent":false,"referenceID":"game_drive_counts@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":49},"end":{"line":35,"character":51}}}},"right":{"node":"field","path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":49},"end":{"line":35,"character":51}}}},{"path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}]}},{"type":"turtle","name":"by_week","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}},"drillExpression":{"kind":"field_reference","name":"SeasonType","path":[]}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}},"drillExpression":{"kind":"field_reference","name":"Week","path":[]}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_excitement","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"avg_excitement","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"SeasonType"},{"field":"Week"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}}},{"path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games per week with scoring, margins and excitement, in schedule order. Answers how the season's weeks compare.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":509,"character":2},"end":{"line":509,"character":121}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":510,"character":8},"end":{"line":514,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}}]},"expressionType":"scalar","code":"HomeConference"},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"drillExpression":{"kind":"field_reference","name":"home_win_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"type":"fieldref","path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"drillExpression":{"kind":"field_reference","name":"avg_attendance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"home_win_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"name":"avg_attendance","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"HomeConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}}},{"path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}}},{"path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Volume and scoring of games by the home team's conference, busiest conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":516,"character":2},"end":{"line":516,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":517,"character":8},"end":{"line":522,"character":3}}}},{"type":"turtle","name":"by_classification","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"drillExpression":{"kind":"field_reference","name":"classification_matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"classification_matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"primaryKey":"classification_matchup"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games by division matchup, for example FBS against FCS, showing how lopsided each type of matchup is.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":524,"character":2},"end":{"line":524,"character":111}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":525,"character":8},"end":{"line":529,"character":3}}}},{"type":"turtle","name":"most_exciting_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]},"isRepeated":true,"orderBy":[{"field":"ExcitementIndex","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The wildest finishes of the season, ranked by excitement rating.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":531,"character":2},"end":{"line":531,"character":74}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":532,"character":8},"end":{"line":537,"character":3}}}},{"type":"turtle","name":"biggest_blowouts","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"victory_margin","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The most lopsided results of the season, ranked by winning margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":539,"character":2},"end":{"line":539,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":540,"character":8},"end":{"line":545,"character":3}}}},{"type":"turtle","name":"highest_scoring_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"total_points","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The highest-scoring games of the season, ranked by combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":547,"character":2},"end":{"line":547,"character":77}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":548,"character":8},"end":{"line":553,"character":3}}}},{"type":"turtle","name":"best_attended_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]}},{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]},"isRepeated":true,"orderBy":[{"field":"Attendance","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Attendance is not null","e":{"node":"is-not-null","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Best-attended games of the season, ranked by announced attendance.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":555,"character":2},"end":{"line":555,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":556,"character":8},"end":{"line":561,"character":3}}}},{"type":"turtle","name":"biggest_upsets","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"drillExpression":{"kind":"field_reference","name":"winner","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}},"e":{"node":"aggregate","function":"max","e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"field","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}}]},"expressionType":"scalar"},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":26},"end":{"line":567,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"max(abs(pregame_elo_edge))"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"winner","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}}}]},"isRepeated":true,"orderBy":[{"field":"elo_gap","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed and is_elo_upset","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},"right":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}}},{"path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games won by the team the pregame Elo ratings rated lower, biggest rating gap first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":563,"character":2},"end":{"line":563,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":564,"character":8},"end":{"line":570,"character":3}}}},{"type":"turtle","name":"playoff_bracket","pipeline":[{"type":"reduce","queryFields":[{"name":"round_name","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"name":"bracket_slot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}},"e":{"node":"field","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BracketSlot","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}}]},"expressionType":"scalar","code":"`Playoff BracketSlot`"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"round_name","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}}},{"name":"bracket_slot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}}},{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"bracket_slot"}],"filterList":[{"node":"filterCondition","code":"is_playoff_game","e":{"node":"field","path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The College Football Playoff bracket in round order, with each game's result.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":572,"character":2},"end":{"line":572,"character":87}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":573,"character":8},"end":{"line":583,"character":3}}}},{"type":"turtle","name":"scoring_trend","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"primaryKey":"game_date"},"isRepeated":true,"orderBy":[{"field":"game_date"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Season shape week by week: how many games are played and how many points are scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":585,"character":2},"end":{"line":585,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":586,"character":8},"end":{"line":590,"character":3}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"Id","dialect":"duckdb","persistent":false,"extends":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","sourceID":"games@file:///Users/timolsen/cfb-data/cfb-games/index.malloy","referenceID":"games@file:///Users/timolsen/cfb-data/cfb-games/index.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":38,"character":4},"end":{"line":38,"character":17}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":38,"character":15},"end":{"line":38,"character":17}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":38,"character":15},"end":{"line":38,"character":17}}}}]},"expressionType":"scalar","code":"Id"},{"name":"season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":20}}},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":39,"character":14},"end":{"line":39,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Season","path":[]},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":39,"character":14},"end":{"line":39,"character":20}}}}]},"expressionType":"scalar","code":"Season"},{"type":"fieldref","path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":40,"character":4},"end":{"line":40,"character":14}}},"drillExpression":{"kind":"field_reference","name":"week_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}}},{"type":"fieldref","path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":41,"character":4},"end":{"line":41,"character":13}}},"drillExpression":{"kind":"field_reference","name":"week_sort","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}}},{"name":"start_date","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":42,"character":4},"end":{"line":42,"character":27}}},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":42,"character":18},"end":{"line":42,"character":27}}}},"drillExpression":{"kind":"field_reference","name":"StartDate","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":42,"character":18},"end":{"line":42,"character":27}}}}]},"expressionType":"scalar","code":"StartDate"},{"name":"start_time_tbd","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":43,"character":4},"end":{"line":43,"character":34}}},"e":{"node":"field","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":43,"character":22},"end":{"line":43,"character":34}}}},"drillExpression":{"kind":"field_reference","name":"StartTimeTBD","path":[]},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":43,"character":22},"end":{"line":43,"character":34}}}}]},"expressionType":"scalar","code":"StartTimeTBD"},{"name":"completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":26}}},"e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":44,"character":17},"end":{"line":44,"character":26}}}},"drillExpression":{"kind":"field_reference","name":"Completed","path":[]},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":44,"character":17},"end":{"line":44,"character":26}}}}]},"expressionType":"scalar","code":"Completed"},{"name":"neutral_site","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":45,"character":4},"end":{"line":45,"character":31}}},"e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":45,"character":20},"end":{"line":45,"character":31}}}},"drillExpression":{"kind":"field_reference","name":"NeutralSite","path":[]},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":45,"character":20},"end":{"line":45,"character":31}}}}]},"expressionType":"scalar","code":"NeutralSite"},{"name":"conference_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":46,"character":4},"end":{"line":46,"character":37}}},"e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":46,"character":23},"end":{"line":46,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"ConferenceGame","path":[]},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":46,"character":23},"end":{"line":46,"character":37}}}}]},"expressionType":"scalar","code":"ConferenceGame"},{"name":"venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":18}}},"e":{"node":"field","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":47,"character":13},"end":{"line":47,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":47,"character":13},"end":{"line":47,"character":18}}}}]},"expressionType":"scalar","code":"Venue"},{"name":"attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":48,"character":4},"end":{"line":48,"character":28}}},"e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":48,"character":18},"end":{"line":48,"character":28}}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":48,"character":18},"end":{"line":48,"character":28}}}}]},"expressionType":"scalar","code":"Attendance"},{"name":"notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":49,"character":4},"end":{"line":49,"character":18}}},"e":{"node":"field","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":49,"character":13},"end":{"line":49,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Notes","path":[]},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":49,"character":13},"end":{"line":49,"character":18}}}}]},"expressionType":"scalar","code":"Notes"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":30}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":50,"character":12},"end":{"line":50,"character":30}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":50,"character":12},"end":{"line":50,"character":30}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"name":"playoff_round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":40}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":40}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":40}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"type":"fieldref","path":["has_drive_detail"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":20}}},"drillExpression":{"kind":"field_reference","name":"has_drive_detail","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when this game has drive-by-drive detail, so a drive chart can be drawn. Division I games have it; Division II and III games do not.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":149}}}}]}}},{"name":"away_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":25}}},"e":{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":55,"character":17},"end":{"line":55,"character":25}}}},"drillExpression":{"kind":"field_reference","name":"AwayTeam","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":55,"character":17},"end":{"line":55,"character":25}}}}]},"expressionType":"scalar","code":"AwayTeam"},{"name":"away_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":56,"character":4},"end":{"line":56,"character":37}}},"e":{"node":"field","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":56,"character":23},"end":{"line":56,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"AwayConference","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":56,"character":23},"end":{"line":56,"character":37}}}}]},"expressionType":"scalar","code":"AwayConference"},{"name":"away_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":57,"character":4},"end":{"line":57,"character":45}}},"e":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":57,"character":27},"end":{"line":57,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"AwayClassification","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":57,"character":27},"end":{"line":57,"character":45}}}}]},"expressionType":"scalar","code":"AwayClassification"},{"name":"away_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":29}}},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":58,"character":19},"end":{"line":58,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"AwayPoints","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":58,"character":19},"end":{"line":58,"character":29}}}}]},"expressionType":"scalar","code":"AwayPoints"},{"name":"away_line_scores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":59,"character":4},"end":{"line":59,"character":38}}},"e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":59,"character":24},"end":{"line":59,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"AwayLineScores","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":59,"character":24},"end":{"line":59,"character":38}}}}]},"expressionType":"scalar","code":"AwayLineScores"},{"name":"away_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":60,"character":4},"end":{"line":60,"character":38}}},"e":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":60,"character":24},"end":{"line":60,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"AwayPregameElo","path":[]},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":60,"character":24},"end":{"line":60,"character":38}}}}]},"expressionType":"scalar","code":"AwayPregameElo"},{"name":"away_seed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":35}}},"e":{"node":"field","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":61,"character":17},"end":{"line":61,"character":35}}}},"drillExpression":{"kind":"field_reference","name":"Playoff AwaySeed","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":61,"character":17},"end":{"line":61,"character":35}}}}]},"expressionType":"scalar","code":"`Playoff AwaySeed`"},{"name":"home_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":25}}},"e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":62,"character":17},"end":{"line":62,"character":25}}}},"drillExpression":{"kind":"field_reference","name":"HomeTeam","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":62,"character":17},"end":{"line":62,"character":25}}}}]},"expressionType":"scalar","code":"HomeTeam"},{"name":"home_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":63,"character":4},"end":{"line":63,"character":37}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":63,"character":23},"end":{"line":63,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":63,"character":23},"end":{"line":63,"character":37}}}}]},"expressionType":"scalar","code":"HomeConference"},{"name":"home_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":45}}},"e":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":64,"character":27},"end":{"line":64,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"HomeClassification","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":64,"character":27},"end":{"line":64,"character":45}}}}]},"expressionType":"scalar","code":"HomeClassification"},{"name":"home_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":29}}},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":65,"character":19},"end":{"line":65,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"HomePoints","path":[]},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":65,"character":19},"end":{"line":65,"character":29}}}}]},"expressionType":"scalar","code":"HomePoints"},{"name":"home_line_scores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":66,"character":4},"end":{"line":66,"character":38}}},"e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":66,"character":24},"end":{"line":66,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"HomeLineScores","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":66,"character":24},"end":{"line":66,"character":38}}}}]},"expressionType":"scalar","code":"HomeLineScores"},{"name":"home_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":67,"character":4},"end":{"line":67,"character":38}}},"e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":67,"character":24},"end":{"line":67,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"HomePregameElo","path":[]},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":67,"character":24},"end":{"line":67,"character":38}}}}]},"expressionType":"scalar","code":"HomePregameElo"},{"name":"home_seed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":35}}},"e":{"node":"field","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":68,"character":17},"end":{"line":68,"character":35}}}},"drillExpression":{"kind":"field_reference","name":"Playoff HomeSeed","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":68,"character":17},"end":{"line":68,"character":35}}}}]},"expressionType":"scalar","code":"`Playoff HomeSeed`"},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":18}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":16}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}},{"type":"fieldref","path":["is_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":15}}},"drillExpression":{"kind":"field_reference","name":"is_overtime","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}}},{"type":"fieldref","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":16}}},"drillExpression":{"kind":"field_reference","name":"is_elo_upset","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}}},{"type":"fieldref","path":["is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":19}}},"drillExpression":{"kind":"field_reference","name":"is_comeback_win","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}}},{"type":"fieldref","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":20}}},"drillExpression":{"kind":"field_reference","name":"pregame_elo_edge","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}}},{"name":"excitement_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":39}}},"e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":39}}}}]},"expressionType":"scalar","code":"ExcitementIndex"},{"type":"fieldref","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":78,"character":4},"end":{"line":78,"character":16}}},"drillExpression":{"kind":"field_reference","name":"thrill_index","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["thrill_tier"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":15}}},"drillExpression":{"kind":"field_reference","name":"thrill_tier","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}}},{"type":"fieldref","path":["thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":20}}},"drillExpression":{"kind":"field_reference","name":"thrill_closeness","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}}},{"type":"fieldref","path":["thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":21}}},"drillExpression":{"kind":"field_reference","name":"thrill_late_drama","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}}},{"type":"fieldref","path":["thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":19}}},"drillExpression":{"kind":"field_reference","name":"thrill_comeback","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}}},{"type":"fieldref","path":["thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":19}}},"drillExpression":{"kind":"field_reference","name":"thrill_overtime","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}}},{"type":"fieldref","path":["thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":18}}},"drillExpression":{"kind":"field_reference","name":"thrill_scoring","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}}},{"type":"fieldref","path":["thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":85,"character":4},"end":{"line":85,"character":16}}},"drillExpression":{"kind":"field_reference","name":"thrill_upset","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}}},{"type":"fieldref","path":["thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":86,"character":4},"end":{"line":86,"character":17}}},"drillExpression":{"kind":"field_reference","name":"thrill_stakes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":38,"character":4},"end":{"line":38,"character":17}}}},{"name":"season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":20}}}},{"name":"week_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":40,"character":4},"end":{"line":40,"character":14}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}}},{"name":"week_sort","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":41,"character":4},"end":{"line":41,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}}},{"name":"start_date","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":42,"character":4},"end":{"line":42,"character":27}}}},{"name":"start_time_tbd","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":43,"character":4},"end":{"line":43,"character":34}}}},{"name":"completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":26}}}},{"name":"neutral_site","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":45,"character":4},"end":{"line":45,"character":31}}}},{"name":"conference_game","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":46,"character":4},"end":{"line":46,"character":37}}}},{"name":"venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":18}}}},{"name":"attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":48,"character":4},"end":{"line":48,"character":28}}}},{"name":"notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":49,"character":4},"end":{"line":49,"character":18}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":30}}}},{"name":"playoff_round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":40}}}},{"name":"has_drive_detail","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":20}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when this game has drive-by-drive detail, so a drive chart can be drawn. Division I games have it; Division II and III games do not.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":149}}}}]}}},{"name":"away_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":25}}}},{"name":"away_conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":56,"character":4},"end":{"line":56,"character":37}}}},{"name":"away_classification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":57,"character":4},"end":{"line":57,"character":45}}}},{"name":"away_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":29}}}},{"name":"away_line_scores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":59,"character":4},"end":{"line":59,"character":38}}}},{"name":"away_pregame_elo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":60,"character":4},"end":{"line":60,"character":38}}}},{"name":"away_seed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":35}}}},{"name":"home_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":25}}}},{"name":"home_conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":63,"character":4},"end":{"line":63,"character":37}}}},{"name":"home_classification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":45}}}},{"name":"home_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":29}}}},{"name":"home_line_scores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":66,"character":4},"end":{"line":66,"character":38}}}},{"name":"home_pregame_elo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":67,"character":4},"end":{"line":67,"character":38}}}},{"name":"home_seed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":35}}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":18}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}},{"name":"is_overtime","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}}},{"name":"is_elo_upset","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}}},{"name":"is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":20}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}}},{"name":"excitement_index","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":39}}}},{"name":"thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":78,"character":4},"end":{"line":78,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}}},{"name":"thrill_tier","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}}},{"name":"thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":20}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}}},{"name":"thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}}},{"name":"thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}}},{"name":"thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}}},{"name":"thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":18}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}}},{"name":"thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":85,"character":4},"end":{"line":85,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}}},{"name":"thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":86,"character":4},"end":{"line":86,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"start_date"},{"field":"game_id"}],"filterList":[{"node":"filterCondition","code":"Season = 2026","e":{"node":"=","kids":{"left":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":27,"character":4},"end":{"line":27,"character":10}}}},"right":{"node":"numberLiteral","literal":"2026"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":27,"character":4},"end":{"line":27,"character":10}}}}]},"stableFilter":{"kind":"literal_equality","expression":{"kind":"field_reference","name":"Season","path":[]},"value":{"kind":"number_literal","number_value":2026}},"isSourceFilter":false},{"node":"filterCondition","code":"season_label ~ $SEASON","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"SEASON","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}},"expr":{"node":"field","path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":16}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":16}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"HomeTeam ~ $TEAM or AwayTeam ~ $TEAM","e":{"node":"or","kids":{"left":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"TEAM","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},"expr":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":4},"end":{"line":31,"character":12}}}}}},"right":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"TEAM","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":35},"end":{"line":31,"character":40}}}},"expr":{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":24},"end":{"line":31,"character":32}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":4},"end":{"line":31,"character":12}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":24},"end":{"line":31,"character":32}}}}],"givenUsage":[{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":35},"end":{"line":31,"character":40}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"HomeConference ~ $CONFERENCE or AwayConference ~ $CONFERENCE","e":{"node":"or","kids":{"left":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"CONFERENCE","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},"expr":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":4},"end":{"line":32,"character":18}}}}}},"right":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"CONFERENCE","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":53},"end":{"line":32,"character":64}}}},"expr":{"node":"field","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":36},"end":{"line":32,"character":50}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":4},"end":{"line":32,"character":18}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":36},"end":{"line":32,"character":50}}}}],"givenUsage":[{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":53},"end":{"line":32,"character":64}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"HomeClassification ~ $DIVISION or AwayClassification ~ $DIVISION","e":{"node":"or","kids":{"left":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"DIVISION","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},"expr":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":4},"end":{"line":33,"character":22}}}}}},"right":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"DIVISION","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":59},"end":{"line":33,"character":68}}}},"expr":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":38},"end":{"line":33,"character":56}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":4},"end":{"line":33,"character":22}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":38},"end":{"line":33,"character":56}}}}],"givenUsage":[{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":59},"end":{"line":33,"character":68}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"week_label ~ $GAME_WEEK","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"GAME_WEEK","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}},"expr":{"node":"field","path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":4},"end":{"line":34,"character":14}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":4},"end":{"line":34,"character":14}}}}],"givenUsage":[{"id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":27,"character":4},"end":{"line":27,"character":10}}}},{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":16}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":4},"end":{"line":31,"character":12}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":24},"end":{"line":31,"character":32}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":4},"end":{"line":32,"character":18}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":36},"end":{"line":32,"character":50}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":4},"end":{"line":33,"character":22}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":38},"end":{"line":33,"character":56}}}},{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":4},"end":{"line":34,"character":14}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":38,"character":15},"end":{"line":38,"character":17}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":39,"character":14},"end":{"line":39,"character":20}}}},{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":40,"character":4},"end":{"line":40,"character":14}}}},{"path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":41,"character":4},"end":{"line":41,"character":13}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":42,"character":18},"end":{"line":42,"character":27}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":43,"character":22},"end":{"line":43,"character":34}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":44,"character":17},"end":{"line":44,"character":26}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":45,"character":20},"end":{"line":45,"character":31}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":46,"character":23},"end":{"line":46,"character":37}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":47,"character":13},"end":{"line":47,"character":18}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":48,"character":18},"end":{"line":48,"character":28}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":49,"character":13},"end":{"line":49,"character":18}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":50,"character":12},"end":{"line":50,"character":30}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":40}}}},{"path":["has_drive_detail"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":20}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":55,"character":17},"end":{"line":55,"character":25}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":56,"character":23},"end":{"line":56,"character":37}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":57,"character":27},"end":{"line":57,"character":45}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":58,"character":19},"end":{"line":58,"character":29}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":59,"character":24},"end":{"line":59,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":60,"character":24},"end":{"line":60,"character":38}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":61,"character":17},"end":{"line":61,"character":35}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":62,"character":17},"end":{"line":62,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":63,"character":23},"end":{"line":63,"character":37}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":64,"character":27},"end":{"line":64,"character":45}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":65,"character":19},"end":{"line":65,"character":29}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":66,"character":24},"end":{"line":66,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":67,"character":24},"end":{"line":67,"character":38}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":68,"character":17},"end":{"line":68,"character":35}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":18}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":16}}}},{"path":["is_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":15}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":16}}}},{"path":["is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":19}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":20}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":39}}}},{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":78,"character":4},"end":{"line":78,"character":16}}}},{"path":["thrill_tier"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":15}}}},{"path":["thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":20}}}},{"path":["thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":21}}}},{"path":["thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":19}}}},{"path":["thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":19}}}},{"path":["thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":18}}}},{"path":["thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":85,"character":4},"end":{"line":85,"character":16}}}},{"path":["thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":86,"character":4},"end":{"line":86,"character":17}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":35},"end":{"line":31,"character":40}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":53},"end":{"line":32,"character":64}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":59},"end":{"line":33,"character":68}}}},{"id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}}]},"expandedFieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":27,"character":4},"end":{"line":27,"character":10}}}},{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":4},"end":{"line":30,"character":16}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":4},"end":{"line":31,"character":12}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":24},"end":{"line":31,"character":32}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":4},"end":{"line":32,"character":18}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":36},"end":{"line":32,"character":50}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":4},"end":{"line":33,"character":22}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":38},"end":{"line":33,"character":56}}}},{"path":["week_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":4},"end":{"line":34,"character":14}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":38,"character":15},"end":{"line":38,"character":17}}}},{"path":["week_sort"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":41,"character":4},"end":{"line":41,"character":13}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":42,"character":18},"end":{"line":42,"character":27}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":43,"character":22},"end":{"line":43,"character":34}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":44,"character":17},"end":{"line":44,"character":26}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":45,"character":20},"end":{"line":45,"character":31}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":46,"character":23},"end":{"line":46,"character":37}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":47,"character":13},"end":{"line":47,"character":18}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":48,"character":18},"end":{"line":48,"character":28}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":49,"character":13},"end":{"line":49,"character":18}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":50,"character":12},"end":{"line":50,"character":30}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":40}}}},{"path":["has_drive_detail"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":20}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":58,"character":19},"end":{"line":58,"character":29}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":59,"character":24},"end":{"line":59,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":60,"character":24},"end":{"line":60,"character":38}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":61,"character":17},"end":{"line":61,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":65,"character":19},"end":{"line":65,"character":29}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":66,"character":24},"end":{"line":66,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":67,"character":24},"end":{"line":67,"character":38}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":68,"character":17},"end":{"line":68,"character":35}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":18}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":16}}}},{"path":["is_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":15}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":16}}}},{"path":["is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":19}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":20}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":77,"character":24},"end":{"line":77,"character":39}}}},{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":78,"character":4},"end":{"line":78,"character":16}}}},{"path":["thrill_tier"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":15}}}},{"path":["thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":20}}}},{"path":["thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":21}}}},{"path":["thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":19}}}},{"path":["thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":19}}}},{"path":["thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":18}}}},{"path":["thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":85,"character":4},"end":{"line":85,"character":16}}}},{"path":["thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":86,"character":4},"end":{"line":86,"character":17}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_counts","drive_rows"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":40,"character":33},"end":{"line":40,"character":56}}}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},{"path":["drive_counts","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":35,"character":54},"end":{"line":35,"character":73}}}}],"expandedGivenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},{"id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}}],"activeJoins":[{"path":["drive_counts"]}],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":25,"character":7},"end":{"line":89,"character":1}}},"name":"games_2026","annotations":{"blockNotes":[{"text":"#\" Every game of the 2026 season — filter by team, conference or week, and sort by kickoff or by how exciting it was.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":20,"character":0},"end":{"line":20,"character":118}}}},{"text":"# artifact { title=\"2026 Games\" givens { SEASON='2026' } }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":21,"character":0},"end":{"line":21,"character":59}}}}]},"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":30,"character":19},"end":{"line":30,"character":26}}}},{"id":"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":31,"character":15},"end":{"line":31,"character":20}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":32,"character":21},"end":{"line":32,"character":32}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":33,"character":25},"end":{"line":33,"character":34}}}},{"id":"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":34,"character":17},"end":{"line":34,"character":27}}}}],"as":"games_2026"},"ranking_drives":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":67,"character":4},"end":{"line":68,"character":37}}},"e":{"node":"field","path":["game","season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":68,"character":20},"end":{"line":68,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"season_label","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":68,"character":20},"end":{"line":68,"character":37}}}}]},"expressionType":"scalar","code":"game.season_label","annotations":{"notes":[{"text":"#(doc) Season the drive was played in, as text, for example 2026.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":67,"character":4},"end":{"line":67,"character":70}}}}]}},{"name":"home_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":30}}},"e":{"node":"field","path":["game","HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":71,"character":17},"end":{"line":71,"character":30}}}},"drillExpression":{"kind":"field_reference","name":"HomeTeam","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":71,"character":17},"end":{"line":71,"character":30}}}}]},"expressionType":"scalar","code":"game.HomeTeam","annotations":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}},{"name":"away_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":74,"character":30}}},"e":{"node":"field","path":["game","AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":74,"character":17},"end":{"line":74,"character":30}}}},"drillExpression":{"kind":"field_reference","name":"AwayTeam","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":74,"character":17},"end":{"line":74,"character":30}}}}]},"expressionType":"scalar","code":"game.AwayTeam","annotations":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-19469e3c-91a1-4f8e-aec6-9f9c92d8796b","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-19469e3c-91a1-4f8e-aec6-9f9c92d8796b","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-726f8eb9-6025-4eb6-912d-da15c2f8c22b","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_games","dialect":"duckdb","tablePath":"cfb_games","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Week","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"SeasonType","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartDate","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartTimeTBD","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"NeutralSite","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ConferenceGame","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"VenueId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ExcitementIndex","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Highlights","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Competition","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Format","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff RoundName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BracketSlot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BowlName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"calc_periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":96}}},"e":{"node":"+","kids":{"left":{"node":"-","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"pattern","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"replacement","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}}}},"name":"replace","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"node":"stringLiteral","literal":","},{"node":"stringLiteral","literal":""}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"length(HomeLineScores) - length(replace(HomeLineScores, ',', '')) + 1"},{"name":"calc_home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":46,"character":4},"end":{"line":50,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when HomeLineScores is null\n      else coalesce(split_part!string(HomeLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 3):::number, 0)"},{"name":"calc_away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":52,"character":4},"end":{"line":56,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when AwayLineScores is null\n      else coalesce(split_part!string(AwayLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 3):::number, 0)"}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":8},"end":{"line":28,"character":46}}},"parameters":{},"as":"games_raw","annotations":{"blockNotes":[{"text":"#(doc) Every game of every season in the feed, one row per game, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":27,"character":0},"end":{"line":27,"character":95}}}}]},"arguments":{}},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]},"expandedFieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":23},"end":{"line":57,"character":18}}},"givenUsage":[]},"name":"QuerySource-27ee7240-7d1d-45eb-880a-c83cb41a5984","as":"games_lines","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":8},"end":{"line":57,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with the line score parsed: periods played and each team's points through three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":41,"character":0},"end":{"line":41,"character":103}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":90}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}}},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three - calc_away_points_after_three"},{"name":"calc_is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":98}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n      or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":86}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"35"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"28.0"}}}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"35 * greatest(0, 1 - abs(HomePoints - AwayPoints) / 28.0)"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":112}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"20"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"17.0"}}}}}]},"expressionType":"scalar"}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"coalesce(20 * greatest(0, 1 - abs(calc_home_points_after_three - calc_away_points_after_three) / 17.0), 0)"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":73,"character":4},"end":{"line":77,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}}}}}}}}],"caseThen":[{"node":"numberLiteral","literal":"10"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}]},"expressionType":"scalar","code":"pick 10 when\n        (HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n        or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)\n      else 0"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":71}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"15"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}}]},"expressionType":"scalar","code":"pick 15 when calc_periods_played > 4 else 0"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"12"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}}}}},"right":{"node":"numberLiteral","literal":"80.0"}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"12 * least(1, (HomePoints + AwayPoints) / 80.0)"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":83,"character":4},"end":{"line":87,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}}}}}}}}],"caseThen":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"10"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"250.0"}}}]},"expressionType":"scalar"}}}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expressionType":"scalar","code":"pick 10 * least(1, abs(HomePregameElo - AwayPregameElo) / 250.0) when\n        (HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n        or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)\n      else 0"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":4},"end":{"line":89,"character":78}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}}],"caseThen":[{"node":"numberLiteral","literal":"8"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}]},"expressionType":"scalar","code":"pick 8 when `Playoff Competition` is not null else 0"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_lines@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expandedFieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":30},"end":{"line":90,"character":18}}},"givenUsage":[]},"name":"QuerySource-e59ee81d-9b77-4852-bc4e-888ba06212b8","as":"games_thrill_parts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":8},"end":{"line":90,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with each part of the thrill index as its own column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":59,"character":0},"end":{"line":59,"character":67}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":95,"character":4},"end":{"line":100,"character":8}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"not","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}}},"right":{"node":"is-null","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}}}}},"right":{"node":"is-null","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND((",")::NUMERIC)"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}}}},"name":"round","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"100"},{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},"right":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}}}},"right":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}}}},"right":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}}}},"right":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}}}},"right":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}}}},"right":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}}}}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when not Completed or HomePoints is null or AwayPoints is null\n      else round(least(100,\n        calc_thrill_closeness + calc_thrill_late_drama + calc_thrill_comeback + calc_thrill_overtime\n        + calc_thrill_scoring + calc_thrill_upset + calc_thrill_stakes\n      ))"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_thrill_parts@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expandedFieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":93,"character":24},"end":{"line":101,"character":18}}},"givenUsage":[]},"name":"QuerySource-e17c0923-432e-4a31-b391-e3f99c470349","as":"game","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":12},"end":{"line":63,"character":50}}},"annotations":{"blockNotes":[{"text":"#(doc) The game this drive was played in, with its date, teams, venue and final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":62,"character":2},"end":{"line":62,"character":89}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Announced attendance for the game, in people. Missing for many games, especially at the Division II and Division III level.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":144,"character":4},"end":{"line":144,"character":135}}}}],"blockNotes":[]}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":191,"character":4},"end":{"line":191,"character":13}}}},{"text":"#(doc) Division the away team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":192,"character":4},"end":{"line":192,"character":102}}}}],"blockNotes":[]}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":195,"character":4},"end":{"line":195,"character":13}}}},{"text":"#(doc) Conference the away team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":196,"character":4},"end":{"line":196,"character":148}}}}],"blockNotes":[]}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":184,"character":4},"end":{"line":184,"character":47}}}}],"blockNotes":[]}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the away team scored in each period, as a comma-separated list in order, for example 3,7,7,0 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":134}}}}],"blockNotes":[]}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the away team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":89}}}}],"blockNotes":[]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":99}}}}],"blockNotes":[]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the away team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the home value to sum to 1 and is not the result itself.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":194}}}}],"blockNotes":[]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":106}}}}],"blockNotes":[]}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":187,"character":4},"end":{"line":187,"character":13}}}},{"text":"#(doc) Name of the away team, for example Michigan or Texas.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":188,"character":4},"end":{"line":188,"character":65}}}}],"blockNotes":[]}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game has been played and the final score is official.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":135,"character":4},"end":{"line":135,"character":79}}}}],"blockNotes":[]}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when both teams belong to the same conference, so the result counts in the conference standings.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":141,"character":4},"end":{"line":141,"character":113}}}}],"blockNotes":[]}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Excitement rating for the game, built from how much and how often the win probability swung. Typical games rate near 4; the wildest finishes rate above 8.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":214,"character":4},"end":{"line":214,"character":166}}}}],"blockNotes":[]}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Link to the game's video highlights, when one is published.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":217,"character":4},"end":{"line":217,"character":71}}}}],"blockNotes":[]}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":161,"character":4},"end":{"line":161,"character":13}}}},{"text":"#(doc) Division the home team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":102}}}}],"blockNotes":[]}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":13}}}},{"text":"#(doc) Conference the home team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":166,"character":4},"end":{"line":166,"character":148}}}}],"blockNotes":[]}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":154,"character":4},"end":{"line":154,"character":47}}}}],"blockNotes":[]}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the home team scored in each period, as a comma-separated list in order, for example 7,10,0,14 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":172,"character":4},"end":{"line":172,"character":136}}}}],"blockNotes":[]}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the home team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":169,"character":4},"end":{"line":169,"character":89}}}}],"blockNotes":[]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":181,"character":4},"end":{"line":181,"character":99}}}}],"blockNotes":[]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the home team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the away value to sum to 1 and is not the result itself — a team can lose a game it was 90% likely to win. Matches the actual winner in about 90% of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":175,"character":4},"end":{"line":175,"character":293}}}}],"blockNotes":[]}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":178,"character":4},"end":{"line":178,"character":106}}}}],"blockNotes":[]}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":157,"character":4},"end":{"line":157,"character":13}}}},{"text":"#(doc) Name of the home team, for example Alabama or Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":158,"character":4},"end":{"line":158,"character":69}}}}],"blockNotes":[]}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the game. Join key to the drives data, whose GameId column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":116,"character":4},"end":{"line":116,"character":114}}}}],"blockNotes":[]}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game was played at a neutral venue rather than either team's own stadium. Bowl games, playoff games and kickoff classics are typically neutral site.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":138,"character":4},"end":{"line":138,"character":174}}}}],"blockNotes":[]}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Free-text note about the game, usually the name of a kickoff event or a special circumstance, for example Aer Lingus College Football Classic.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":220,"character":4},"end":{"line":220,"character":154}}}}],"blockNotes":[]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the away team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":244,"character":4},"end":{"line":244,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":247,"character":4},"end":{"line":247,"character":13}}}},{"text":"#(doc) Bowl the playoff game was hosted by, for example Rose Bowl, Sugar Bowl or College Football Playoff National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":248,"character":4},"end":{"line":248,"character":133}}}}],"blockNotes":[]}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Slot the game occupies in the playoff bracket, for example QF1 for the first quarterfinal or CH for the championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":238,"character":4},"end":{"line":238,"character":129}}}}],"blockNotes":[]}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":223,"character":4},"end":{"line":223,"character":13}}}},{"text":"#(doc) Postseason competition the game belongs to. cfp for the College Football Playoff; missing for regular-season and ordinary bowl games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":224,"character":4},"end":{"line":224,"character":145}}}}],"blockNotes":[]}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff bracket format in force for the season, for example twelve_team_2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":227,"character":4},"end":{"line":227,"character":89}}}}],"blockNotes":[]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the home team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":241,"character":4},"end":{"line":241,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":230,"character":4},"end":{"line":230,"character":13}}}},{"text":"#(doc) Playoff round in machine form: first_round, quarterfinal, semifinal or championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":231,"character":4},"end":{"line":231,"character":96}}}}],"blockNotes":[]}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":234,"character":4},"end":{"line":234,"character":13}}}},{"text":"#(doc) Playoff round in readable form: First Round, Quarterfinal, Semifinal or National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":235,"character":4},"end":{"line":235,"character":106}}}}],"blockNotes":[]}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Season year the game belongs to: 2025 or 2026. A season's bowls and playoff games played in January still belong to the season that started in August.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":119,"character":4},"end":{"line":119,"character":162}}}}],"blockNotes":[]}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":13}}}},{"text":"#(doc) Portion of the season: regular for the regular season, postseason for bowls and College Football Playoff games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":126,"character":4},"end":{"line":126,"character":123}}}}],"blockNotes":[]}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Scheduled kickoff date and time, expressed in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":129,"character":4},"end":{"line":129,"character":80}}}}],"blockNotes":[]}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the kickoff time had not been announced yet, so only the date is meaningful.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":132,"character":4},"end":{"line":132,"character":98}}}}],"blockNotes":[]}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":150,"character":4},"end":{"line":150,"character":13}}}},{"text":"#(doc) Name of the stadium the game was played in, for example Bryant-Denny Stadium.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":151,"character":4},"end":{"line":151,"character":89}}}}],"blockNotes":[]}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the stadium the game was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":68}}}}],"blockNotes":[]}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Week of the season the game was played in, numbered within the season type. Regular-season weeks run 1 to 16; postseason bowl and playoff games carry their own week numbers.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":185}}}}],"blockNotes":[]}},{"name":"game_date","type":"date","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":259,"character":32}}},"e":{"node":"cast","dstType":{"type":"date"},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}},"safe":false,"srcType":{"type":"timestamp"}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}}]},"expressionType":"scalar","code":"StartDate::date","annotations":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}},{"name":"matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":262,"character":49}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"node":"stringLiteral","literal":" at "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":15},"end":{"line":262,"character":49}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(AwayTeam, ' at ', HomeTeam)","annotations":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}},{"name":"final_score","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":267,"character":93}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":11},"end":{"line":266,"character":93}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":11},"end":{"line":267,"character":93}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick concat(HomeTeam, ' ', HomePoints::string, ', ', AwayTeam, ' ', AwayPoints::string) when HomePoints >= AwayPoints\n      else concat(AwayTeam, ' ', AwayPoints::string, ', ', HomeTeam, ' ', HomePoints::string)","annotations":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}},{"name":"winner","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":273,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePoints > AwayPoints\n      pick AwayTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}},{"name":"loser","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":279,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}}}],"caseThen":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}]},"expressionType":"scalar","code":"pick AwayTeam when HomePoints > AwayPoints\n      pick HomeTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that lost the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":92}}}}]}},{"name":"home_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":282,"character":39}}},"e":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}]},"expressionType":"scalar","code":"HomePoints > AwayPoints","annotations":{"notes":[{"text":"#(doc) True when the home team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":40}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":285,"character":43}}},"e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints + AwayPoints","annotations":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}},{"name":"point_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":288,"character":43}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints - AwayPoints","annotations":{"notes":[{"text":"#(doc) Home points minus away points. Positive when the home team won, negative when the away team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":108}}}}]}},{"name":"victory_margin","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":291,"character":50}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":22},"end":{"line":291,"character":50}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(HomePoints - AwayPoints)","annotations":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}},{"name":"margin_bucket","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":298,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"8"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"16"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"27"}}}],"caseThen":[{"node":"stringLiteral","literal":"One-score game"},{"node":"stringLiteral","literal":"Two-score game"},{"node":"stringLiteral","literal":"Comfortable"}],"caseElse":{"node":"stringLiteral","literal":"Blowout"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":33},"end":{"line":295,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":33},"end":{"line":296,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":30},"end":{"line":297,"character":58}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'One-score game' when abs(HomePoints - AwayPoints) <= 8\n      pick 'Two-score game' when abs(HomePoints - AwayPoints) <= 16\n      pick 'Comfortable' when abs(HomePoints - AwayPoints) <= 27\n      else 'Blowout'","annotations":{"notes":[{"text":"#(doc) How close the game was: One-score game for a margin of 8 or less, Two-score game for 9 to 16, Comfortable for 17 to 27, and Blowout for 28 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":159}}}}]}},{"name":"classification_matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":301,"character":84}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"node":"stringLiteral","literal":" vs "},{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":30},"end":{"line":301,"character":84}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(HomeClassification, ' vs ', AwayClassification)","annotations":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}},{"name":"is_fbs_matchup","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":304,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},"right":{"node":"stringLiteral","literal":"fbs"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}},"right":{"node":"stringLiteral","literal":"fbs"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}}]},"expressionType":"scalar","code":"HomeClassification = 'fbs' and AwayClassification = 'fbs'","annotations":{"notes":[{"text":"#(doc) True when both teams are FBS programs, the top division of college football.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":303,"character":88}}}}]}},{"name":"is_playoff_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":307,"character":56}}},"e":{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}]},"expressionType":"scalar","code":"`Playoff Competition` is not null","annotations":{"notes":[{"text":"#(doc) True when the game is part of the College Football Playoff bracket.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":306,"character":79}}}}]}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":310,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}]},"expressionType":"scalar","code":"HomePregameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}},{"name":"elo_favorite","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":316,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePregameElo > AwayPregameElo\n      pick AwayTeam when AwayPregameElo > HomePregameElo\n      else null","annotations":{"notes":[{"text":"#(doc) Team the pregame Elo ratings favored, before any home-field adjustment.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":312,"character":83}}}}]}},{"name":"is_elo_upset","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":321,"character":70}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n      or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)","annotations":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}},{"name":"home_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":324,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}]},"expressionType":"scalar","code":"HomePostgameElo - HomePregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the home team gained from the game. Negative when the home team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":323,"character":109}}}}]}},{"name":"away_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":327,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}]},"expressionType":"scalar","code":"AwayPostgameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the away team gained from the game. Negative when the away team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":326,"character":109}}}}]}},{"name":"excitement_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":334,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},"right":{"node":"numberLiteral","literal":"8"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Competitive"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}}]},"expressionType":"scalar","code":"pick 'Instant classic' when ExcitementIndex > 8\n      pick 'Thriller' when ExcitementIndex > 6\n      pick 'Competitive' when ExcitementIndex > 4\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) How dramatic the game was, from its excitement rating: Instant classic above 8, Thriller above 6, Competitive above 4, and Routine at 4 or below.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":329,"character":157}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":340,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}}]},"expressionType":"scalar","code":"Season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":339,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":347,"character":42}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when SeasonType = 'postseason'\n      else concat('Week ', `Week`::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}},{"name":"week_sort","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":352,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"numberLiteral","literal":"100"}],"caseElse":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}]},"expressionType":"scalar","code":"pick 100 when SeasonType = 'postseason'\n      else `Week`","annotations":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}},{"name":"periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":363,"character":41}}},"e":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_periods_played","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}}]},"expressionType":"scalar","code":"calc_periods_played","annotations":{"notes":[{"text":"#(doc) Number of periods the game went, from the line score: 4 for regulation, 5 or more when it went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":362,"character":119}}}}]}},{"name":"is_overtime","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":366,"character":42}}},"e":{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},"right":{"node":"numberLiteral","literal":"4"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}}]},"expressionType":"scalar","code":"calc_periods_played > 4","annotations":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}},{"name":"home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":369,"character":59}}},"e":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_home_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three","annotations":{"notes":[{"text":"#(doc) Home team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":75}}}}]}},{"name":"away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":372,"character":59}}},"e":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_away_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}}]},"expressionType":"scalar","code":"calc_away_points_after_three","annotations":{"notes":[{"text":"#(doc) Away team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":371,"character":75}}}}]}},{"name":"margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":375,"character":49}}},"e":{"node":"field","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}},"drillExpression":{"kind":"field_reference","name":"calc_margin_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}}]},"expressionType":"scalar","code":"calc_margin_after_three","annotations":{"notes":[{"text":"#(doc) Home points minus away points going into the fourth quarter. Positive when the home team led.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":374,"character":105}}}}]}},{"name":"is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":378,"character":43}}},"e":{"node":"field","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_is_comeback_win","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}}]},"expressionType":"scalar","code":"calc_is_comeback_win","annotations":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}},{"name":"thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":400,"character":45}}},"e":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_closeness","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}}]},"expressionType":"scalar","code":"calc_thrill_closeness","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}},{"name":"thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":403,"character":47}}},"e":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_late_drama","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}}]},"expressionType":"scalar","code":"calc_thrill_late_drama","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}},{"name":"thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":406,"character":43}}},"e":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_comeback","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_comeback","annotations":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}},{"name":"thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":409,"character":43}}},"e":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_overtime","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_overtime","annotations":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}},{"name":"thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":412,"character":41}}},"e":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_scoring","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}}]},"expressionType":"scalar","code":"calc_thrill_scoring","annotations":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}},{"name":"thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":415,"character":37}}},"e":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_upset","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_upset","annotations":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}},{"name":"thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":418,"character":39}}},"e":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_stakes","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}}]},"expressionType":"scalar","code":"calc_thrill_stakes","annotations":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}},{"name":"thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":427,"character":37}}},"e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_index","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_index","annotations":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}},{"name":"thrill_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":435,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},"right":{"node":"numberLiteral","literal":"75"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},"right":{"node":"numberLiteral","literal":"55"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}},"right":{"node":"numberLiteral","literal":"35"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Good game"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}}]},"expressionType":"scalar","code":"pick null when calc_thrill_index is null\n      pick 'Instant classic' when calc_thrill_index >= 75\n      pick 'Thriller' when calc_thrill_index >= 55\n      pick 'Good game' when calc_thrill_index >= 35\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":25}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":441,"character":18},"end":{"line":441,"character":25}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}},{"name":"completed_game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":444,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":28},"end":{"line":444,"character":35}}}},"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: Completed }","annotations":{"notes":[{"text":"#(doc) Number of games that have been played and have a final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":443,"character":73}}}}]}},{"name":"points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":447,"character":54}}},"e":{"node":"+","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":21},"end":{"line":447,"character":36}}}},"right":{"node":"aggregate","function":"sum","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":39},"end":{"line":447,"character":54}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(HomePoints) + sum(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Total points scored by both teams across all games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":446,"character":63}}}}]}},{"name":"avg_total_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":450,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":24},"end":{"line":450,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(total_points)","annotations":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}},{"name":"avg_home_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":453,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":23},"end":{"line":453,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":452,"character":51}}}}]}},{"name":"avg_away_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":456,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":23},"end":{"line":456,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":455,"character":51}}}}]}},{"name":"avg_victory_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":459,"character":45}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":26},"end":{"line":459,"character":45}}}},"refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"avg(victory_margin)","annotations":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}},{"name":"home_win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":463,"character":119}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":21},"end":{"line":463,"character":28}}}},"filterList":[{"node":"filterCondition","code":"home_win","e":{"node":"field","path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":58},"end":{"line":463,"character":65}}}},"filterList":[{"node":"filterCondition","code":"Completed and HomePoints != AwayPoints","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":51},"end":{"line":463,"character":119}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: home_win } / nullif(count() { where: Completed and HomePoints != AwayPoints }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}},{"name":"one_score_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":467,"character":99}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":27},"end":{"line":467,"character":34}}}},"filterList":[{"node":"filterCondition","code":"victory_margin <= 8","e":{"node":"<=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},"right":{"node":"numberLiteral","literal":"8"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},{"path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":68},"end":{"line":467,"character":99}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: victory_margin <= 8 } / nullif(completed_game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games decided by 8 points or fewer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":465,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":466,"character":4},"end":{"line":466,"character":14}}}}]}},{"name":"blowout_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":470,"character":60}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":21},"end":{"line":470,"character":28}}}},"filterList":[{"node":"filterCondition","code":"victory_margin >= 28","e":{"node":">=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}},"right":{"node":"numberLiteral","literal":"28"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: victory_margin >= 28 }","annotations":{"notes":[{"text":"#(doc) Number of games decided by 28 points or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":469,"character":57}}}}]}},{"name":"upset_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":473,"character":50}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":19},"end":{"line":473,"character":26}}}},"filterList":[{"node":"filterCondition","code":"is_elo_upset","e":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"expressionType":"aggregate","code":"count() { where: is_elo_upset }","annotations":{"notes":[{"text":"#(doc) Number of games in which the team with the lower pregame Elo rating won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":472,"character":84}}}}]}},{"name":"total_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":476,"character":39}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":24},"end":{"line":476,"character":39}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Attendance)","annotations":{"notes":[{"text":"#(doc) Total announced attendance across all games that reported it, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":475,"character":84}}}}]}},{"name":"avg_attendance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":479,"character":37}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":22},"end":{"line":479,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(Attendance)","annotations":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}},{"name":"max_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":482,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":22},"end":{"line":482,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}}]},"expressionType":"aggregate","code":"max(Attendance)","annotations":{"notes":[{"text":"#(doc) Largest announced attendance for a single game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":481,"character":70}}}}]}},{"name":"avg_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":485,"character":42}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":22},"end":{"line":485,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}},{"name":"max_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":488,"character":42}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":22},"end":{"line":488,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}}]},"expressionType":"aggregate","code":"max(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Highest excitement rating of any game in the group.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":487,"character":63}}}}]}},{"name":"avg_thrill_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(thrill_index)","annotations":{"notes":[{"text":"#(doc) Average thrill index across completed games, 0 to 100.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":66}}}}]}},{"name":"neutral_site_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":495,"character":79}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":25},"end":{"line":495,"character":32}}}},"filterList":[{"node":"filterCondition","code":"NeutralSite","e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":58},"end":{"line":495,"character":79}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: NeutralSite } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played at a neutral venue.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":53}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":494,"character":4},"end":{"line":494,"character":14}}}}]}},{"name":"conference_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":499,"character":85}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":28},"end":{"line":499,"character":35}}}},"filterList":[{"node":"filterCondition","code":"ConferenceGame","e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":64},"end":{"line":499,"character":85}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: ConferenceGame } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played between teams from the same conference.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":497,"character":73}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":498,"character":4},"end":{"line":498,"character":14}}}}]}},{"name":"avg_home_pregame_elo","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":502,"character":47}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":28},"end":{"line":502,"character":47}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePregameElo)","annotations":{"notes":[{"text":"#(doc) Average pregame Elo rating of the home team. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":501,"character":101}}}}]}},{"name":"home_team_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":505,"character":38}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":23},"end":{"line":505,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}}]},"expressionType":"aggregate","code":"count(HomeTeam)","annotations":{"notes":[{"text":"#(doc) Number of distinct teams appearing as the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":504,"character":64}}}}]}},{"type":"turtle","name":"by_week","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}},"drillExpression":{"kind":"field_reference","name":"SeasonType","path":[]}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}},"drillExpression":{"kind":"field_reference","name":"Week","path":[]}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_excitement","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"avg_excitement","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"SeasonType"},{"field":"Week"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}}},{"path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games per week with scoring, margins and excitement, in schedule order. Answers how the season's weeks compare.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":509,"character":2},"end":{"line":509,"character":121}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":510,"character":8},"end":{"line":514,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}}]},"expressionType":"scalar","code":"HomeConference"},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"drillExpression":{"kind":"field_reference","name":"home_win_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"type":"fieldref","path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"drillExpression":{"kind":"field_reference","name":"avg_attendance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"home_win_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"name":"avg_attendance","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"HomeConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}}},{"path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}}},{"path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Volume and scoring of games by the home team's conference, busiest conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":516,"character":2},"end":{"line":516,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":517,"character":8},"end":{"line":522,"character":3}}}},{"type":"turtle","name":"by_classification","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"drillExpression":{"kind":"field_reference","name":"classification_matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"classification_matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"primaryKey":"classification_matchup"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games by division matchup, for example FBS against FCS, showing how lopsided each type of matchup is.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":524,"character":2},"end":{"line":524,"character":111}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":525,"character":8},"end":{"line":529,"character":3}}}},{"type":"turtle","name":"most_exciting_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]},"isRepeated":true,"orderBy":[{"field":"ExcitementIndex","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The wildest finishes of the season, ranked by excitement rating.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":531,"character":2},"end":{"line":531,"character":74}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":532,"character":8},"end":{"line":537,"character":3}}}},{"type":"turtle","name":"biggest_blowouts","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"victory_margin","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The most lopsided results of the season, ranked by winning margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":539,"character":2},"end":{"line":539,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":540,"character":8},"end":{"line":545,"character":3}}}},{"type":"turtle","name":"highest_scoring_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"total_points","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The highest-scoring games of the season, ranked by combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":547,"character":2},"end":{"line":547,"character":77}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":548,"character":8},"end":{"line":553,"character":3}}}},{"type":"turtle","name":"best_attended_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]}},{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]},"isRepeated":true,"orderBy":[{"field":"Attendance","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Attendance is not null","e":{"node":"is-not-null","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Best-attended games of the season, ranked by announced attendance.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":555,"character":2},"end":{"line":555,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":556,"character":8},"end":{"line":561,"character":3}}}},{"type":"turtle","name":"biggest_upsets","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"drillExpression":{"kind":"field_reference","name":"winner","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}},"e":{"node":"aggregate","function":"max","e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"field","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}}]},"expressionType":"scalar"},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":26},"end":{"line":567,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"max(abs(pregame_elo_edge))"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"winner","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}}}]},"isRepeated":true,"orderBy":[{"field":"elo_gap","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed and is_elo_upset","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},"right":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}}},{"path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games won by the team the pregame Elo ratings rated lower, biggest rating gap first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":563,"character":2},"end":{"line":563,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":564,"character":8},"end":{"line":570,"character":3}}}},{"type":"turtle","name":"playoff_bracket","pipeline":[{"type":"reduce","queryFields":[{"name":"round_name","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"name":"bracket_slot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}},"e":{"node":"field","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BracketSlot","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}}]},"expressionType":"scalar","code":"`Playoff BracketSlot`"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"round_name","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}}},{"name":"bracket_slot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}}},{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"bracket_slot"}],"filterList":[{"node":"filterCondition","code":"is_playoff_game","e":{"node":"field","path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The College Football Playoff bracket in round order, with each game's result.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":572,"character":2},"end":{"line":572,"character":87}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":573,"character":8},"end":{"line":583,"character":3}}}},{"type":"turtle","name":"scoring_trend","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"primaryKey":"game_date"},"isRepeated":true,"orderBy":[{"field":"game_date"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Season shape week by week: how many games are played and how many points are scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":585,"character":2},"end":{"line":585,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":586,"character":8},"end":{"line":590,"character":3}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"Id","dialect":"duckdb","persistent":false,"extends":"games_scored@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","sourceID":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","referenceID":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":34},"end":{"line":63,"character":40}}}},"right":{"node":"field","path":["game","Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":43},"end":{"line":63,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":34},"end":{"line":63,"character":40}}}},{"path":["game","Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":43},"end":{"line":63,"character":50}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}},{"type":"turtle","name":"game_drive_chart","pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":6},"end":{"line":79,"character":20}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}}]},"expressionType":"scalar","code":"Id"},{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":6},"end":{"line":80,"character":23}}},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}}]},"expressionType":"scalar","code":"GameId"},{"type":"fieldref","path":["home_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}},"drillExpression":{"kind":"field_reference","name":"home_team","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}}},{"type":"fieldref","path":["away_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}},"drillExpression":{"kind":"field_reference","name":"away_team","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}}},{"name":"drive_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":6},"end":{"line":83,"character":33}}},"e":{"node":"field","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}}]},"expressionType":"scalar","code":"DriveNumber"},{"name":"offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":6},"end":{"line":84,"character":24}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}}]},"expressionType":"scalar","code":"Offense"},{"name":"defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":6},"end":{"line":85,"character":24}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}}]},"expressionType":"scalar","code":"Defense"},{"name":"is_home_offense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":6},"end":{"line":86,"character":38}}},"e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"IsHomeOffense","path":[]},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}}]},"expressionType":"scalar","code":"IsHomeOffense"},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_period","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":33}}},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}},"drillExpression":{"kind":"field_reference","name":"StartPeriod","path":[]},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}}]},"expressionType":"scalar","code":"StartPeriod"},{"name":"start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":6},"end":{"line":91,"character":44}}},"e":{"node":"field","path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"chart_start_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}}]},"ungroupings":[],"expressionType":"scalar","code":"chart_start_yardline"},{"name":"end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":40}}},"e":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}},"drillExpression":{"kind":"field_reference","name":"chart_end_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}}]},"expressionType":"scalar","code":"chart_end_yardline"},{"name":"return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":58}}},"e":{"node":"field","path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}},"drillExpression":{"kind":"field_reference","name":"chart_return_start_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}}]},"expressionType":"scalar","code":"chart_return_start_yardline"},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["end_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}},"drillExpression":{"kind":"field_reference","name":"end_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}}},{"name":"plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":6},"end":{"line":96,"character":20}}},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}}]},"expressionType":"scalar","code":"Plays"},{"name":"yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":6},"end":{"line":97,"character":20}}},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}}]},"expressionType":"scalar","code":"Yards"},{"name":"elapsed_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":6},"end":{"line":98,"character":51}}},"e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}},"drillExpression":{"kind":"field_reference","name":"time_of_possession_seconds","path":[]},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}}]},"expressionType":"scalar","code":"time_of_possession_seconds"},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["result_abbreviation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}},"drillExpression":{"kind":"field_reference","name":"result_abbreviation","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}}},{"type":"fieldref","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}},"drillExpression":{"kind":"field_reference","name":"drive_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["defensive_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}},"drillExpression":{"kind":"field_reference","name":"defensive_score_type","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}}},{"type":"fieldref","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}},"drillExpression":{"kind":"field_reference","name":"is_special_teams_touchdown","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}}},{"type":"fieldref","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}},"drillExpression":{"kind":"field_reference","name":"is_kickoff_return_touchdown","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["special_teams_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}},"drillExpression":{"kind":"field_reference","name":"special_teams_score_type","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":6},"end":{"line":79,"character":20}}}},{"name":"game_id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":6},"end":{"line":80,"character":23}}}},{"name":"home_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}}},{"name":"away_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}}},{"name":"drive_number","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":6},"end":{"line":83,"character":33}}}},{"name":"offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":6},"end":{"line":84,"character":24}}}},{"name":"defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":6},"end":{"line":85,"character":24}}}},{"name":"is_home_offense","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":6},"end":{"line":86,"character":38}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_period","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":33}}}},{"name":"start_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":6},"end":{"line":91,"character":44}}}},{"name":"end_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":40}}}},{"name":"return_start_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":58}}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"end_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}}},{"name":"plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":6},"end":{"line":96,"character":20}}}},{"name":"yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":6},"end":{"line":97,"character":20}}}},{"name":"elapsed_seconds","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":6},"end":{"line":98,"character":51}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"result_abbreviation","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}}},{"name":"drive_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}}},{"name":"defensive_points_scored","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}}},{"name":"defensive_score_type","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}}},{"name":"is_special_teams_touchdown","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}}},{"name":"is_kickoff_return_touchdown","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}}},{"name":"special_teams_score_type","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"drive_number"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}},{"path":["home_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}}},{"path":["away_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}},{"path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}},{"path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}}},{"path":["end_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}},{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}}},{"path":["result_abbreviation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}}},{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}}},{"path":["defensive_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}}},{"path":["special_teams_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every possession of one game, in order, with the geometry and score ledger a drive chart draws from. Filter it to a single GameId.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":76,"character":2},"end":{"line":76,"character":140}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":77,"character":8},"end":{"line":110,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":25,"character":8},"end":{"line":27,"character":1}}},"parameters":{},"as":"ranking_drives","annotations":{"blockNotes":[{"text":"#(doc) Drives with garbage time left out when the checkbox is on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":24,"character":0},"end":{"line":24,"character":66}}}}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per drive (possession) of the 2025 and 2026 college football seasons, with the game\nit was played in joined in. Use it for offensive and defensive drive efficiency, Eckel rate,\nfield position, scoring rates, and drive-by-drive game charts.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":55,"character":0},"end":{"line":59,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per drive (a single possession) in the 2025 and 2026 college football seasons, covering\nthe full Division I schedule: every FBS game and every FCS game. Each drive records who had the ball and who was\ndefending, when the possession started and ended on the game clock, where it started and\nended on the field, how many plays and yards it produced, how it ended (touchdown, field\ngoal, punt, interception, fumble, turnover on downs, end of half), and the score for both\nteams before and after. Use it for drive efficiency, scoring rates, field position,\ntime of possession, three-and-outs, and drive-by-drive game charts. Joins to game-level\ninformation on GameId.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":236,"character":0},"end":{"line":245,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}}}}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true},{"node":"filterCondition","code":"$EXCLUDE_GARBAGE = false or not is_garbage_possession","e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"given","id":"given/15:EXCLUDE_GARBAGE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"EXCLUDE_GARBAGE","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":9},"end":{"line":26,"character":25}}}},"right":{"node":"false"}}},"right":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":41},"end":{"line":26,"character":62}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":41},"end":{"line":26,"character":62}}}}],"givenUsage":[{"id":"given/15:EXCLUDE_GARBAGE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":9},"end":{"line":26,"character":25}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"ranking_drives@file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy"},"ranking_team_games":{"type":"sql_select","selectStr":"\n  WITH sides AS (\n    SELECT Id AS game_id, Season AS season, \"Week\" AS week_number, SeasonType AS season_type,\n      StartDate AS start_date, Completed AS completed, ConferenceGame AS conference_game,\n      TRUE AS is_home, HomeTeam AS team, HomeConference AS conference, HomeClassification AS classification,\n      AwayTeam AS opponent, AwayConference AS opponent_conference, AwayClassification AS opponent_classification,\n      HomePoints AS points_for, AwayPoints AS points_against,\n      HomePregameElo AS pregame_elo, HomePostgameElo AS postgame_elo, AwayPregameElo AS opponent_pregame_elo\n    FROM cfb_games\n    UNION ALL\n    SELECT Id, Season, \"Week\", SeasonType,\n      StartDate, Completed, ConferenceGame,\n      FALSE, AwayTeam, AwayConference, AwayClassification,\n      HomeTeam, HomeConference, HomeClassification,\n      AwayPoints, HomePoints,\n      AwayPregameElo, AwayPostgameElo, HomePregameElo\n    FROM cfb_games\n  )\n  SELECT *,\n    CAST(game_id AS VARCHAR) || '|' || team AS team_game_id,\n    -- the team's most recent game that carries a postgame Elo, so a\n    -- ranking can show where the rating stands now\n    postgame_elo IS NOT NULL\n      AND row_number() OVER (\n        PARTITION BY team, season, postgame_elo IS NULL ORDER BY start_date DESC\n      ) = 1 AS is_latest_rated_game\n  FROM sides\n","name":"sql://duckdb/a322d13b-ede6-5975-b3f3-b897e2cccf63","as":"ranking_team_games","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":30,"character":8},"end":{"line":44,"character":1}}},"annotations":{"blockNotes":[{"text":"#(doc) Team-games with every (optionally garbage-free) drive the team was on the field for, on either side of the ball.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":29,"character":0},"end":{"line":29,"character":120}}}}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per team per game in the 2025 and 2026 seasons: every game appears twice, once\nfrom each team's side, with points for and against, the team's and opponent's conference\nand division, and pregame and postgame Elo. Joins the drives the team ran and the drives it\ndefended, so a team's record, scoring margin and drive efficiency on both sides of the ball\ncome from one source. Use it for team rankings, records and strength of schedule.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":17,"character":0},"end":{"line":23,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) One row per team per game: every game appears twice, once from the home team's side and once from the away team's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":43,"character":0},"end":{"line":43,"character":122}}}}]}}},"fields":[{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"week_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"start_date","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["start_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_home","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_home"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_classification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_for","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"points_against","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"postgame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"opponent_pregame_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"team_game_id","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["team_game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"is_latest_rated_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}},"refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":44,"character":37},"end":{"line":71,"character":3}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":37,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}}]},"expressionType":"scalar","code":"season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":36,"character":4},"end":{"line":36,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":42,"character":47}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["season_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":41,"character":29},"end":{"line":41,"character":40}}}},{"path":["week_number"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":27},"end":{"line":42,"character":38}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":42,"character":11},"end":{"line":42,"character":47}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when season_type = 'postseason'\n      else concat('Week ', week_number::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16, or Postseason.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":39,"character":4},"end":{"line":39,"character":81}}}}]}},{"name":"is_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":45,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":14},"end":{"line":45,"character":23}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":28},"end":{"line":45,"character":38}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":45,"character":41},"end":{"line":45,"character":55}}}}]},"expressionType":"scalar","code":"completed and points_for > points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team won it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":60}}}}]}},{"name":"is_loss","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":48,"character":56}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}}}}},"refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":15},"end":{"line":48,"character":24}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":29},"end":{"line":48,"character":39}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":48,"character":42},"end":{"line":48,"character":56}}}}]},"expressionType":"scalar","code":"completed and points_for < points_against","annotations":{"notes":[{"text":"#(doc) True when the game is over and this team lost it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":47,"character":4},"end":{"line":47,"character":61}}}}]}},{"name":"scoring_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":51,"character":49}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},"right":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":22},"end":{"line":51,"character":32}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":51,"character":35},"end":{"line":51,"character":49}}}}]},"expressionType":"scalar","code":"points_for - points_against","annotations":{"notes":[{"text":"#(doc) This team's points minus its opponent's.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":52}}}}]}},{"name":"games_played","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":56,"character":48}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":20},"end":{"line":56,"character":27}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}}]},"expressionType":"aggregate","code":"count() { where: completed }","annotations":{"notes":[{"text":"#(doc) Number of completed games played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":45}}}}]}},{"name":"wins","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":59,"character":37}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":12},"end":{"line":59,"character":19}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}}]},"expressionType":"aggregate","code":"count() { where: is_win }","annotations":{"notes":[{"text":"#(doc) Games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":22}}}}]}},{"name":"losses","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":62,"character":40}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":14},"end":{"line":62,"character":21}}}},"filterList":[{"node":"filterCondition","code":"is_loss","e":{"node":"field","path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}}]},"expressionType":"aggregate","code":"count() { where: is_loss }","annotations":{"notes":[{"text":"#(doc) Games lost.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":23}}}}]}},{"name":"win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":83}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":16},"end":{"line":66,"character":23}}}},"filterList":[{"node":"filterCondition","code":"is_win","e":{"node":"field","path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":51},"end":{"line":66,"character":58}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":33},"end":{"line":66,"character":39}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":68},"end":{"line":66,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":66,"character":44},"end":{"line":66,"character":83}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_win } / nullif(count() { where: completed }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":41}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":14}}}}]}},{"name":"points_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":69,"character":59}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":23},"end":{"line":69,"character":38}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":48},"end":{"line":69,"character":57}}}}]},"expressionType":"aggregate","code":"avg(points_for) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points scored per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":53}}}}]}},{"name":"points_allowed_per_game","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":72,"character":71}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":31},"end":{"line":72,"character":50}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":60},"end":{"line":72,"character":69}}}}]},"expressionType":"aggregate","code":"avg(points_against) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average points allowed per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":54}}}}]}},{"name":"avg_scoring_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":75,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":26},"end":{"line":75,"character":45}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":55},"end":{"line":75,"character":64}}}}]},"expressionType":"aggregate","code":"avg(scoring_margin) { where: completed }","annotations":{"notes":[{"text":"#(doc) Average scoring margin per completed game. Positive means the team outscores its opponents.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":103}}}}]}},{"name":"current_elo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":78,"character":68}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":19},"end":{"line":78,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_latest_rated_game","e":{"node":"field","path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}}]},"expressionType":"aggregate","code":"max(postgame_elo) { where: is_latest_rated_game }","annotations":{"notes":[{"text":"#(doc) The team's Elo rating after its most recent rated game: where the rating stands now. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":141}}}}]}},{"name":"strength_of_schedule","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":28},"end":{"line":81,"character":53}}}},"filterList":[{"node":"filterCondition","code":"completed","e":{"node":"field","path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":63},"end":{"line":81,"character":72}}}}]},"expressionType":"aggregate","code":"avg(opponent_pregame_elo) { where: completed }","annotations":{"notes":[{"text":"#(doc) Strength of schedule: the average pregame Elo rating of the opponents played. Higher means a tougher schedule.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":122}}}}]}},{"name":"on_offense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":35,"character":4},"end":{"line":36,"character":44}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["team_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":36,"character":18},"end":{"line":36,"character":37}}}},"right":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":36,"character":40},"end":{"line":36,"character":44}}}}}},"refSummary":{"fieldUsage":[{"path":["team_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":36,"character":18},"end":{"line":36,"character":37}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":36,"character":40},"end":{"line":36,"character":44}}}}]},"expressionType":"scalar","code":"team_drives.Offense = team","annotations":{"notes":[{"text":"#(doc) True for a drive this team ran.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":35,"character":4},"end":{"line":35,"character":43}}}}]}},{"name":"on_defense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":38,"character":4},"end":{"line":43,"character":44}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["team_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":43,"character":18},"end":{"line":43,"character":37}}}},"right":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":43,"character":40},"end":{"line":43,"character":44}}}}}},"refSummary":{"fieldUsage":[{"path":["team_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":43,"character":18},"end":{"line":43,"character":37}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":43,"character":40},"end":{"line":43,"character":44}}}}]},"expressionType":"scalar","code":"team_drives.Defense = team","annotations":{"notes":[{"text":"#(doc) True for a drive this team defended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":38,"character":4},"end":{"line":38,"character":48}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-f3c09cec-0d93-4e5c-ba2f-4b9ef9f3aa2b","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-f3c09cec-0d93-4e5c-ba2f-4b9ef9f3aa2b","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-2486397c-8e91-4ff4-9198-cb95d66f2dee","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":13},"end":{"line":29,"character":111}}},"parameters":{},"as":"offense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team ran on offense in this game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":28,"character":2},"end":{"line":28,"character":59}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},"right":{"node":"field","path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},"right":{"node":"field","path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":46},"end":{"line":29,"character":53}}}},{"path":["offense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":56},"end":{"line":29,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":82},"end":{"line":29,"character":86}}}},{"path":["offense_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":29,"character":89},"end":{"line":29,"character":111}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-f3c09cec-0d93-4e5c-ba2f-4b9ef9f3aa2b","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-f3c09cec-0d93-4e5c-ba2f-4b9ef9f3aa2b","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-2486397c-8e91-4ff4-9198-cb95d66f2dee","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":13},"end":{"line":32,"character":111}}},"parameters":{},"as":"defense_drives","annotations":{"blockNotes":[{"text":"#(doc) The drives this team defended in this game — its opponent's possessions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":82}}}}]},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_base@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},"right":{"node":"field","path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},"right":{"node":"field","path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":46},"end":{"line":32,"character":53}}}},{"path":["defense_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":56},"end":{"line":32,"character":77}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":82},"end":{"line":32,"character":86}}}},{"path":["defense_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":32,"character":89},"end":{"line":32,"character":111}}}}]}},{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the drive. Formed from the game id plus the drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":250,"character":4},"end":{"line":250,"character":107}}}}],"blockNotes":[]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game this drive belongs to. Join key to the games data, whose Id column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":253,"character":4},"end":{"line":253,"character":123}}}}],"blockNotes":[]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":256,"character":4},"end":{"line":256,"character":13}}}},{"text":"#(doc) Team with the ball on this drive, for example Alabama or Oregon.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":257,"character":4},"end":{"line":257,"character":76}}}}],"blockNotes":[]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":260,"character":4},"end":{"line":260,"character":13}}}},{"text":"#(doc) Conference of the team with the ball, for example SEC or Big Ten. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":150}}}}],"blockNotes":[]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":13}}}},{"text":"#(doc) Team defending on this drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":265,"character":4},"end":{"line":265,"character":41}}}}],"blockNotes":[]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":268,"character":4},"end":{"line":268,"character":13}}}},{"text":"#(doc) Conference of the defending team. Missing for independents and for the occasional non-Division-I opponent.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":118}}}}],"blockNotes":[]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Sequence number of the possession within the game, starting at 1. Both teams' drives share one numbering, so drive 5 is the fifth possession of the game by either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":272,"character":4},"end":{"line":272,"character":180}}}}],"blockNotes":[]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the drive put points on the board for either team, including defensive returns and safeties.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":114}}}}],"blockNotes":[]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive started in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":278,"character":4},"end":{"line":278,"character":103}}}}],"blockNotes":[]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on, 0 to 100, in absolute field coordinates: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. Use this to plot both teams' drives on one field.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":226}}}}],"blockNotes":[]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the start of the drive to the end zone the offense is attacking. 75 means the offense started on its own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":143}}}}],"blockNotes":[]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the starting quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":88}}}}],"blockNotes":[]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the starting quarter when the drive began, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":111}}}}],"blockNotes":[]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Quarter the drive ended in: 1 through 4 for regulation, 5 and above for overtime periods.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":101}}}}],"blockNotes":[]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on, in the same absolute field coordinates as the start: 0 is the goal line the away team attacks and 100 is the goal line the home team attacks. A small number of rows fall outside 0 to 100 in the raw feed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":296,"character":4},"end":{"line":296,"character":248}}}}],"blockNotes":[]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Distance in yards from the end of the drive to the end zone the offense was attacking. 0 means the drive reached the end zone.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":299,"character":4},"end":{"line":299,"character":138}}}}],"blockNotes":[]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes left on the game clock in the ending quarter when the drive finished.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":302,"character":4},"end":{"line":302,"character":89}}}}],"blockNotes":[]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds left on the game clock in the ending quarter when the drive finished, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":305,"character":4},"end":{"line":305,"character":112}}}}],"blockNotes":[]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Minutes of game clock the drive consumed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":308,"character":4},"end":{"line":308,"character":53}}}}],"blockNotes":[]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, on top of the minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":311,"character":4},"end":{"line":311,"character":76}}}}],"blockNotes":[]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Number of plays run on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":314,"character":4},"end":{"line":314,"character":45}}}}],"blockNotes":[]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Net yards the offense gained on the drive. Can be negative when sacks and penalties lose ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":317,"character":4},"end":{"line":317,"character":108}}}}],"blockNotes":[]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":320,"character":4},"end":{"line":320,"character":13}}}},{"text":"#(doc) How the drive ended, in the feed's own words: TD, FG, PUNT, DOWNS, INT, FUMBLE, MISSED FG, SF for safety, END OF HALF, END OF GAME, and returned-for-touchdown variants such as INT TD or PUNT RETURN TD where the defense scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":321,"character":4},"end":{"line":321,"character":238}}}}],"blockNotes":[]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) True when the team with the ball on this drive is the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":324,"character":4},"end":{"line":324,"character":76}}}}],"blockNotes":[]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":327,"character":4},"end":{"line":327,"character":78}}}}],"blockNotes":[]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":330,"character":4},"end":{"line":330,"character":74}}}}],"blockNotes":[]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":333,"character":4},"end":{"line":333,"character":78}}}}],"blockNotes":[]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]},"annotations":{"notes":[{"text":"#(doc) Score of the defending team, as it stood when the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":336,"character":4},"end":{"line":336,"character":74}}}}],"blockNotes":[]}},{"name":"is_overtime_conversion","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":362,"character":85}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},"right":{"node":"stringLiteral","literal":"Uncategorized"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":6},"end":{"line":362,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":27},"end":{"line":362,"character":38}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":61},"end":{"line":362,"character":66}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":362,"character":76},"end":{"line":362,"character":81}}}}]},"expressionType":"scalar","code":"StartPeriod >= 5 and DriveResult = 'Uncategorized' and Plays <= 1 and Yards = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this possession is an overtime two-point conversion attempt rather than a\ndrive. From the third overtime on, the rules stop giving each team a possession from\nthe opponent's 25 and give it a single snap from the 3 instead, alternating until one\nteam converts and the other does not.\n\nThe feed has no name for these. It files all nine of them under the literal result\nstring \"Uncategorized\", every one a single play that gains nothing — and that pair of\nfacts, inside overtime, identifies them exactly. Period alone will not do it: the\nfeed skips a period in Missouri-Auburn and labels an ordinary 7-play touchdown drive\nas the seventh period.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":349,"character":4},"end":{"line":360,"character":7}}},"indentStripped":6}]}},{"name":"is_overtime_conversion_made","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":365,"character":69}}},"e":{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":35},"end":{"line":365,"character":57}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":365,"character":62},"end":{"line":365,"character":69}}}}]},"expressionType":"scalar","code":"is_overtime_conversion and Scoring","annotations":{"notes":[{"text":"#(doc) True when an overtime two-point conversion attempt was good. Read from the feed's Scoring flag, which tracks these correctly — it reproduces the 53-51 finish of the nine-period South Dakota game exactly.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":364,"character":4},"end":{"line":364,"character":215}}}}]}},{"name":"result_category","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":398,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}}}},{"node":"field","path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"node":"field","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"END OF HALF"},{"node":"stringLiteral","literal":"END OF GAME"},{"node":"stringLiteral","literal":"END OF 4TH QUARTER"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"KICKOFF"}]}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},"right":{"node":"stringLiteral","literal":"FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},"right":{"node":"stringLiteral","literal":"MISSED FG"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},"right":{"node":"stringLiteral","literal":"INT"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},"right":{"node":"stringLiteral","literal":"FUMBLE"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},"right":{"node":"stringLiteral","literal":"DOWNS"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}},"right":{"node":"stringLiteral","literal":"SF"}}}],"caseThen":[{"node":"stringLiteral","literal":"Two-point conversion made"},{"node":"stringLiteral","literal":"Two-point conversion failed"},{"node":"stringLiteral","literal":"Special teams touchdown"},{"node":"stringLiteral","literal":"Defensive touchdown"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"End of period"},{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"},{"node":"stringLiteral","literal":"Punt"},{"node":"stringLiteral","literal":"Missed field goal"},{"node":"stringLiteral","literal":"Interception"},{"node":"stringLiteral","literal":"Fumble"},{"node":"stringLiteral","literal":"Turnover on downs"},{"node":"stringLiteral","literal":"Safety"}],"caseElse":{"node":"stringLiteral","literal":"Uncategorized"}}},"refSummary":{"fieldUsage":[{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":382,"character":46},"end":{"line":382,"character":68}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":388,"character":25},"end":{"line":388,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":389,"character":32},"end":{"line":389,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":390,"character":28},"end":{"line":390,"character":39}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":391,"character":29},"end":{"line":391,"character":40}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":392,"character":23},"end":{"line":392,"character":34}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":393,"character":36},"end":{"line":393,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":394,"character":31},"end":{"line":394,"character":42}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":395,"character":25},"end":{"line":395,"character":36}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":396,"character":36},"end":{"line":396,"character":47}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":397,"character":25},"end":{"line":397,"character":36}}}}]},"expressionType":"scalar","code":"pick 'Two-point conversion made' when is_overtime_conversion and Scoring\n      pick 'Two-point conversion failed' when is_overtime_conversion\n      // ahead of both the defensive and the offensive touchdown: a kickoff\n      // return is filed as the kicking team's own TD, and a punt return as\n      // a plain defensive score\n      pick 'Special teams touchdown' when is_special_teams_touchdown\n      pick 'Defensive touchdown' when defensive_points_scored >= 6\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'End of period' when DriveResult ? 'END OF HALF' | 'END OF GAME' | 'END OF 4TH QUARTER' | 'END OF HALF TD' | 'END OF GAME TD' | 'KICKOFF'\n      pick 'Touchdown' when DriveResult = 'TD'\n      pick 'Field goal' when DriveResult = 'FG'\n      pick 'Punt' when DriveResult = 'PUNT'\n      pick 'Missed field goal' when DriveResult = 'MISSED FG'\n      pick 'Interception' when DriveResult = 'INT'\n      pick 'Fumble' when DriveResult = 'FUMBLE'\n      pick 'Turnover on downs' when DriveResult = 'DOWNS'\n      pick 'Safety' when DriveResult = 'SF'\n      else 'Uncategorized'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}},{"name":"result_abbreviation","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":420,"character":18}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion made"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},"right":{"node":"stringLiteral","literal":"Two-point conversion failed"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},"right":{"node":"stringLiteral","literal":"Special teams touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},"right":{"node":"stringLiteral","literal":"Defensive touchdown"}}},{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},"right":{"node":"stringLiteral","literal":"Punt"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},"right":{"node":"stringLiteral","literal":"Missed field goal"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},"right":{"node":"stringLiteral","literal":"Interception"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},"right":{"node":"stringLiteral","literal":"Fumble"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},"right":{"node":"stringLiteral","literal":"Turnover on downs"}}},{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}},"right":{"node":"stringLiteral","literal":"Safety"}}}],"caseThen":[{"node":"stringLiteral","literal":"2PT"},{"node":"stringLiteral","literal":"Miss"},{"node":"stringLiteral","literal":"ST TD"},{"node":"stringLiteral","literal":"Def TD"},{"node":"stringLiteral","literal":"Game End"},{"node":"stringLiteral","literal":"Half"},{"node":"stringLiteral","literal":"TD"},{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"P"},{"node":"stringLiteral","literal":"FGA"},{"node":"stringLiteral","literal":"Int"},{"node":"stringLiteral","literal":"Fum"},{"node":"stringLiteral","literal":"Downs"},{"node":"stringLiteral","literal":"S"}],"caseElse":{"node":"stringLiteral","literal":"Other"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":404,"character":22},"end":{"line":404,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":405,"character":23},"end":{"line":405,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":406,"character":24},"end":{"line":406,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":407,"character":25},"end":{"line":407,"character":40}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":27},"end":{"line":410,"character":42}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":410,"character":65},"end":{"line":410,"character":96}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":411,"character":23},"end":{"line":411,"character":38}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":412,"character":21},"end":{"line":412,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":413,"character":21},"end":{"line":413,"character":36}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":414,"character":20},"end":{"line":414,"character":35}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":415,"character":22},"end":{"line":415,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":416,"character":22},"end":{"line":416,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":417,"character":22},"end":{"line":417,"character":37}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":418,"character":24},"end":{"line":418,"character":39}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":419,"character":20},"end":{"line":419,"character":35}}}}]},"expressionType":"scalar","code":"pick '2PT' when result_category = 'Two-point conversion made'\n      pick 'Miss' when result_category = 'Two-point conversion failed'\n      pick 'ST TD' when result_category = 'Special teams touchdown'\n      pick 'Def TD' when result_category = 'Defensive touchdown'\n      // the clock running out on the game reads very differently from it\n      // running out on the first half, so name them apart\n      pick 'Game End' when result_category = 'End of period' and possessions.drives_left_in_game = 1\n      pick 'Half' when result_category = 'End of period'\n      pick 'TD' when result_category = 'Touchdown'\n      pick 'FG' when result_category = 'Field goal'\n      pick 'P' when result_category = 'Punt'\n      pick 'FGA' when result_category = 'Missed field goal'\n      pick 'Int' when result_category = 'Interception'\n      pick 'Fum' when result_category = 'Fumble'\n      pick 'Downs' when result_category = 'Turnover on downs'\n      pick 'S' when result_category = 'Safety'\n      else 'Other'","annotations":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}},{"name":"is_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":423,"character":49}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},"right":{"node":"stringLiteral","literal":"Touchdown"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}}]},"expressionType":"scalar","code":"result_category = 'Touchdown'","annotations":{"notes":[{"text":"#(doc) True when the offense scored a touchdown on this drive. False when the result string says TD but the points went to the defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":422,"character":4},"end":{"line":422,"character":140}}}}]}},{"name":"is_field_goal","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":426,"character":51}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}},"right":{"node":"stringLiteral","literal":"Field goal"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":426,"character":21},"end":{"line":426,"character":36}}}}]},"expressionType":"scalar","code":"result_category = 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a made field goal by the offense. False for a kick that was blocked and returned.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":425,"character":4},"end":{"line":425,"character":122}}}}]}},{"name":"is_punt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":429,"character":35}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":429,"character":15},"end":{"line":429,"character":26}}}}]},"expressionType":"scalar","code":"DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":428,"character":4},"end":{"line":428,"character":48}}}}]}},{"name":"is_turnover","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":432,"character":95}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":432,"character":19},"end":{"line":432,"character":30}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT' | 'FUMBLE' | 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD'","annotations":{"notes":[{"text":"#(doc) True when the offense turned the ball over by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":431,"character":4},"end":{"line":431,"character":81}}}}]}},{"name":"is_turnover_on_downs","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":435,"character":62}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}},"oneOf":[{"node":"stringLiteral","literal":"DOWNS"},{"node":"stringLiteral","literal":"DOWNS TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":435,"character":28},"end":{"line":435,"character":39}}}}]},"expressionType":"scalar","code":"DriveResult ? 'DOWNS' | 'DOWNS TD'","annotations":{"notes":[{"text":"#(doc) True when the offense handed the ball over on downs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":434,"character":4},"end":{"line":434,"character":64}}}}]}},{"name":"is_offensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":438,"character":70}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}},"oneOf":[{"node":"stringLiteral","literal":"Touchdown"},{"node":"stringLiteral","literal":"Field goal"}]}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":438,"character":26},"end":{"line":438,"character":41}}}}]},"expressionType":"scalar","code":"result_category ? 'Touchdown' | 'Field goal'","annotations":{"notes":[{"text":"#(doc) True when the drive ended in points for the offense, by touchdown or field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":437,"character":4},"end":{"line":437,"character":92}}}}]}},{"name":"is_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":53}}},"e":{"node":">","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}},"right":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":441,"character":26},"end":{"line":441,"character":49}}}}]},"expressionType":"scalar","code":"defensive_points_scored > 0","annotations":{"notes":[{"text":"#(doc) True when the drive gave up points to the defense, by return touchdown, blocked kick, or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":108}}}}]}},{"name":"is_kickoff_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":460,"character":49}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},"right":{"node":"numberLiteral","literal":"85"}}}}},"right":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":6},"end":{"line":459,"character":17}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":29},"end":{"line":459,"character":34}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":44},"end":{"line":459,"character":49}}}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":459,"character":60},"end":{"line":459,"character":67}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":10},"end":{"line":460,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":460,"character":28},"end":{"line":460,"character":45}}}}]},"expressionType":"scalar","code":"DriveResult = 'TD' and Plays <= 1 and Yards >= 85 and Scoring\n      and EndOffenseScore - StartOffenseScore = 0","annotations":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}},{"name":"is_punt_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":472,"character":65}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},"right":{"node":"stringLiteral","literal":"TD"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},"right":{"node":"numberLiteral","literal":"6"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},"right":{"node":"numberLiteral","literal":"15"}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}},"right":{"node":"numberLiteral","literal":"100"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":469,"character":7},"end":{"line":469,"character":18}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":10},"end":{"line":470,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":470,"character":35},"end":{"line":470,"character":58}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":10},"end":{"line":471,"character":21}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":471,"character":33},"end":{"line":471,"character":56}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":14},"end":{"line":472,"character":19}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":29},"end":{"line":472,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":472,"character":44},"end":{"line":472,"character":58}}}}]},"expressionType":"scalar","code":"(DriveResult ? 'PUNT TD' | 'PUNT RETURN TD')\n      or (DriveResult = 'PUNT' and defensive_points_scored >= 6)\n      or (DriveResult = 'TD' and defensive_points_scored >= 6\n          and Plays <= 4 and Yards < 15 and EndYardsToGoal = 100)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the defending team ran a punt back for a touchdown, or blocked one and\nreturned it. Named outright by the feed on some rows (PUNT TD, PUNT RETURN TD); on the\nrest it is a punt whose DEFENSE gained the points, or a short possession the feed calls\na TD that ends back on the offense's own goal line — the returner's end zone.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":462,"character":4},"end":{"line":467,"character":7}}},"indentStripped":6}]}},{"name":"is_blocked_kick_return_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":477,"character":78}}},"e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},"right":{"node":"stringLiteral","literal":"MISSED FG TD"}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"()","e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"}]}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}},"right":{"node":"numberLiteral","literal":"6"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":476,"character":6},"end":{"line":476,"character":17}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":11},"end":{"line":477,"character":22}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":477,"character":49},"end":{"line":477,"character":72}}}}]},"expressionType":"scalar","code":"DriveResult = 'MISSED FG TD'\n      or ((DriveResult ? 'FG' | 'MISSED FG') and defensive_points_scored >= 6)","annotations":{"notes":[{"text":"#(doc) True when the defending team returned a blocked or missed field goal for a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":474,"character":4},"end":{"line":474,"character":97}}}}]}},{"name":"is_special_teams_touchdown","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":481,"character":97}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},"right":{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}}}},"right":{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}}]},"expressionType":"scalar","code":"is_kickoff_return_touchdown or is_punt_return_touchdown or is_blocked_kick_return_touchdown","annotations":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}},{"name":"special_teams_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":488,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"node":"field","path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"node":"field","path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}],"caseThen":[{"node":"stringLiteral","literal":"Kickoff return"},{"node":"stringLiteral","literal":"Punt return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":485,"character":33},"end":{"line":485,"character":60}}}},{"path":["is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":486,"character":30},"end":{"line":486,"character":54}}}},{"path":["is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":487,"character":38},"end":{"line":487,"character":70}}}}]},"expressionType":"scalar","code":"pick 'Kickoff return' when is_kickoff_return_touchdown\n      pick 'Punt return' when is_punt_return_touchdown\n      pick 'Blocked kick return' when is_blocked_kick_return_touchdown\n      else null","annotations":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}},{"name":"is_three_and_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":59}}},"e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}},"right":{"node":"stringLiteral","literal":"PUNT"}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":491,"character":39},"end":{"line":491,"character":50}}}}]},"expressionType":"scalar","code":"Plays <= 3 and DriveResult = 'PUNT'","annotations":{"notes":[{"text":"#(doc) True when the drive ran three plays or fewer and ended in a punt, the classic three-and-out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":104}}}}]}},{"name":"is_clock_expiration","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":494,"character":60}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}},"right":{"node":"stringLiteral","literal":"End of period"}}},"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":494,"character":27},"end":{"line":494,"character":42}}}}]},"expressionType":"scalar","code":"result_category = 'End of period'","annotations":{"notes":[{"text":"#(doc) True when the drive simply ran out of clock at the end of a half, a quarter, or the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":101}}}}]}},{"name":"is_explosive_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":497,"character":37}}},"e":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}},"right":{"node":"numberLiteral","literal":"40"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":497,"character":26},"end":{"line":497,"character":31}}}}]},"expressionType":"scalar","code":"Yards >= 40","annotations":{"notes":[{"text":"#(doc) True when the drive gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":496,"character":4},"end":{"line":496,"character":56}}}}]}},{"name":"is_eckel_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":505,"character":76}}},"e":{"node":"or","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},"right":{"node":"numberLiteral","literal":"35"}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}},"right":{"node":"numberLiteral","literal":"10"}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":22},"end":{"line":505,"character":34}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":64},"end":{"line":505,"character":69}}}}]},"expressionType":"scalar","code":"is_touchdown or (EndYardsToGoal <= 35 and Yards >= 10)","annotations":{"notes":[{"text":"#|(doc)\nTrue when the drive was a quality possession in the Eckel-rate sense: it scored a\ntouchdown, or it reached the opponent's 35 having gained at least ten yards. Eckel rate\nproper counts a first down inside the opponent's 40, which needs play-by-play; ending\nat the 35 or closer after a ten-yard gain is the drive-level stand-in.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":499,"character":4},"end":{"line":504,"character":7}}},"indentStripped":6}]}},{"name":"drive_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":523,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},"right":{"node":"stringLiteral","literal":"TD"}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}},"right":{"node":"stringLiteral","literal":"FG"}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}}}},{"node":"numberLiteral","literal":"7"},{"node":"numberLiteral","literal":"3"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":13},"end":{"line":520,"character":28}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":31},"end":{"line":520,"character":48}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":58},"end":{"line":520,"character":73}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":520,"character":76},"end":{"line":520,"character":93}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":522,"character":18},"end":{"line":522,"character":29}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore - StartOffenseScore\n        when EndOffenseScore - StartOffenseScore >= 0 and EndOffenseScore - StartOffenseScore <= 8\n      pick 7 when DriveResult = 'TD'\n      pick 3 when DriveResult = 'FG'\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}},{"name":"is_named_defensive_score","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":528,"character":82}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}},"oneOf":[{"node":"stringLiteral","literal":"INT TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"},{"node":"stringLiteral","literal":"MISSED FG TD"},{"node":"stringLiteral","literal":"DOWNS TD"},{"node":"stringLiteral","literal":"END OF HALF TD"},{"node":"stringLiteral","literal":"END OF GAME TD"},{"node":"stringLiteral","literal":"SF"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":527,"character":6},"end":{"line":527,"character":17}}}}]},"expressionType":"scalar","code":"DriveResult ? 'INT TD' | 'FUMBLE RETURN TD' | 'FUMBLE TD' | 'PUNT TD' | 'PUNT RETURN TD'\n        | 'MISSED FG TD' | 'DOWNS TD' | 'END OF HALF TD' | 'END OF GAME TD' | 'SF'","annotations":{"notes":[{"text":"#(doc) True when the feed's own result string already says the defense scored, for example INT TD, PUNT RETURN TD, or SF.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":525,"character":4},"end":{"line":525,"character":126}}}}]}},{"name":"scoreboard_agrees_with_next_drive","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":543,"character":69}}},"e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"is-null","e":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"!=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},"right":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},"right":{"node":"field","path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":10},"end":{"line":538,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":538,"character":38},"end":{"line":538,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":14},"end":{"line":539,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":14},"end":{"line":540,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}},{"path":["possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":10},"end":{"line":541,"character":34}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":541,"character":37},"end":{"line":541,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":29}}}},{"path":["possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":542,"character":32},"end":{"line":542,"character":68}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":14},"end":{"line":543,"character":29}}}},{"path":["possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":543,"character":32},"end":{"line":543,"character":68}}}}]},"expressionType":"scalar","code":"possessions.next_offense is null\n      or (possessions.next_offense != Offense\n          and EndOffenseScore = possessions.next_start_defense_score\n          and EndDefenseScore = possessions.next_start_offense_score)\n      or (possessions.next_offense = Offense\n          and EndOffenseScore = possessions.next_start_offense_score\n          and EndDefenseScore = possessions.next_start_defense_score)","annotations":{"notes":[{"text":"#|(doc)\nTrue when this drive's closing scoreboard matches the next drive's opening one, with the\ntwo teams' columns swapped if possession changed hands. Roughly 7% of consecutive drives\ndisagree, which is the feed's score columns lagging a possession — so this is what\nseparates a real defensive score from a column that simply jumped.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":530,"character":4},"end":{"line":535,"character":7}}},"indentStripped":6}]}},{"name":"defensive_points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":564,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}}}},"right":{"node":"numberLiteral","literal":"6"}}},"right":{"node":"<=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}}}},"right":{"node":"numberLiteral","literal":"8"}}}}}},"right":{"node":"=","kids":{"left":{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}}}},"right":{"node":"numberLiteral","literal":"2"}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},"right":{"node":"field","path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}}}}}}},{"node":"=","kids":{"left":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},"right":{"node":"stringLiteral","literal":"SF"}}},{"node":"field","path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}],"caseThen":[{"node":"-","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}}}},{"node":"numberLiteral","literal":"2"},{"node":"numberLiteral","literal":"7"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":11},"end":{"line":558,"character":26}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":558,"character":29},"end":{"line":558,"character":46}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":15},"end":{"line":559,"character":30}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":33},"end":{"line":559,"character":50}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":60},"end":{"line":559,"character":75}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":559,"character":78},"end":{"line":559,"character":95}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":17},"end":{"line":560,"character":32}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":560,"character":35},"end":{"line":560,"character":52}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":562,"character":18},"end":{"line":562,"character":29}}}},{"path":["is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":563,"character":18},"end":{"line":563,"character":42}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore - StartDefenseScore\n        when ((EndDefenseScore - StartDefenseScore >= 6 and EndDefenseScore - StartDefenseScore <= 8)\n              or EndDefenseScore - StartDefenseScore = 2)\n         and (is_named_defensive_score or scoreboard_agrees_with_next_drive)\n      pick 2 when DriveResult = 'SF'\n      pick 7 when is_named_defensive_score\n      else 0","annotations":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}},{"name":"defense_points_allowed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":567,"character":53}}},"e":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":53}}}}]},"expressionType":"scalar","code":"defensive_points_scored","annotations":{"notes":[{"text":"#(doc) Kept as an alias of the points the defense scored on this possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":566,"character":4},"end":{"line":566,"character":81}}}}]}},{"name":"defensive_score_type","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":577,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":"=","kids":{"left":{"node":"field","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},"oneOf":[{"node":"stringLiteral","literal":"PUNT"},{"node":"stringLiteral","literal":"PUNT TD"},{"node":"stringLiteral","literal":"PUNT RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"INT"},{"node":"stringLiteral","literal":"INT TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},"oneOf":[{"node":"stringLiteral","literal":"FUMBLE"},{"node":"stringLiteral","literal":"FUMBLE TD"},{"node":"stringLiteral","literal":"FUMBLE RETURN TD"}]}},{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Safety"},{"node":"stringLiteral","literal":"Punt return or block"},{"node":"stringLiteral","literal":"Interception return"},{"node":"stringLiteral","literal":"Fumble return"},{"node":"stringLiteral","literal":"Blocked kick return"}],"caseElse":{"node":"stringLiteral","literal":"Return touchdown"}}},"refSummary":{"fieldUsage":[{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":571,"character":21},"end":{"line":571,"character":44}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":572,"character":25},"end":{"line":572,"character":48}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":573,"character":39},"end":{"line":573,"character":50}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":574,"character":38},"end":{"line":574,"character":49}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":575,"character":32},"end":{"line":575,"character":43}}}},{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":576,"character":38},"end":{"line":576,"character":49}}}}]},"expressionType":"scalar","code":"pick null when defensive_points_scored = 0\n      pick 'Safety' when defensive_points_scored = 2\n      pick 'Punt return or block' when DriveResult ? 'PUNT' | 'PUNT TD' | 'PUNT RETURN TD'\n      pick 'Interception return' when DriveResult ? 'INT' | 'INT TD'\n      pick 'Fumble return' when DriveResult ? 'FUMBLE' | 'FUMBLE TD' | 'FUMBLE RETURN TD'\n      pick 'Blocked kick return' when DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'\n      else 'Return touchdown'","annotations":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}},{"name":"home_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":584,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":582,"character":8},"end":{"line":582,"character":39}}}},{"path":["possessions","prev_despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":8},"end":{"line":583,"character":44}}}},{"path":["possessions","despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":583,"character":48},"end":{"line":583,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":581,"character":6},"end":{"line":584,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_home_score,\n        possessions.prev_despiked_home_score ?? possessions.despiked_home_score\n      )","annotations":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}},{"name":"away_score_after","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":591,"character":7}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"node":"coalesce","kids":{"left":{"node":"field","path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},"right":{"node":"field","path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":589,"character":8},"end":{"line":589,"character":39}}}},{"path":["possessions","prev_despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":8},"end":{"line":590,"character":44}}}},{"path":["possessions","despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":590,"character":48},"end":{"line":590,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":588,"character":6},"end":{"line":591,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"greatest(\n        possessions.despiked_away_score,\n        possessions.prev_despiked_away_score ?? possessions.despiked_away_score\n      )","annotations":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}},{"name":"start_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":597,"character":50}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}}]},"expressionType":"scalar","code":"100 - StartYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}},{"name":"end_field_position","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":600,"character":46}}},"e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":600,"character":32},"end":{"line":600,"character":46}}}}]},"expressionType":"scalar","code":"100 - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}},{"name":"field_position_gained","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":603,"character":62}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},"right":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":29},"end":{"line":603,"character":45}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":603,"character":48},"end":{"line":603,"character":62}}}}]},"expressionType":"scalar","code":"StartYardsToGoal - EndYardsToGoal","annotations":{"notes":[{"text":"#(doc) Net yards of field position the drive gained, measured from where it started to where it ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":602,"character":4},"end":{"line":602,"character":107}}}}]}},{"name":"start_field_position_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":606,"character":78}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":46},"end":{"line":606,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":606,"character":33},"end":{"line":606,"character":68}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"floor((100 - StartYardsToGoal) / 5) * 5 + 2.5","annotations":{"notes":[{"text":"#(doc) Starting field position rounded into five-yard bands and labelled with the middle of the band, so 27.5 covers drives starting between the offense's own 25 and its own 29. Use it to plot field position against scoring without the noise of single-yard buckets.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":605,"character":4},"end":{"line":605,"character":270}}}}]}},{"name":"start_field_position_zone","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":613,"character":27}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},"right":{"node":"numberLiteral","literal":"91"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},"right":{"node":"numberLiteral","literal":"61"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}},"right":{"node":"numberLiteral","literal":"40"}}}],"caseThen":[{"node":"stringLiteral","literal":"Deep in own territory"},{"node":"stringLiteral","literal":"Own territory"},{"node":"stringLiteral","literal":"Midfield"}],"caseElse":{"node":"stringLiteral","literal":"Plus territory"}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":610,"character":40},"end":{"line":610,"character":56}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":611,"character":32},"end":{"line":611,"character":48}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":612,"character":27},"end":{"line":612,"character":43}}}}]},"expressionType":"scalar","code":"pick 'Deep in own territory' when StartYardsToGoal >= 91\n      pick 'Own territory' when StartYardsToGoal >= 61\n      pick 'Midfield' when StartYardsToGoal >= 40\n      else 'Plus territory'","annotations":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}},{"name":"reached_red_zone","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":616,"character":44}}},"e":{"node":"<=","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}},"right":{"node":"numberLiteral","literal":"20"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":616,"character":24},"end":{"line":616,"character":38}}}}]},"expressionType":"scalar","code":"EndYardsToGoal <= 20","annotations":{"notes":[{"text":"#(doc) True when the drive reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":615,"character":4},"end":{"line":615,"character":78}}}}]}},{"name":"quarter_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":625,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},"right":{"node":"numberLiteral","literal":"1"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},"right":{"node":"numberLiteral","literal":"3"}}},{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},"right":{"node":"numberLiteral","literal":"4"}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st"},{"node":"stringLiteral","literal":"2nd"},{"node":"stringLiteral","literal":"3rd"},{"node":"stringLiteral","literal":"4th"},{"node":"stringLiteral","literal":"OT"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":620,"character":22},"end":{"line":620,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":621,"character":22},"end":{"line":621,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":622,"character":22},"end":{"line":622,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":623,"character":22},"end":{"line":623,"character":33}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":624,"character":21},"end":{"line":624,"character":32}}}}]},"expressionType":"scalar","code":"pick '1st' when StartPeriod = 1\n      pick '2nd' when StartPeriod = 2\n      pick '3rd' when StartPeriod = 3\n      pick '4th' when StartPeriod = 4\n      pick 'OT' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}},{"name":"half_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":632,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},"right":{"node":"numberLiteral","literal":"4"}}}}},{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}},"right":{"node":"numberLiteral","literal":"5"}}}],"caseThen":[{"node":"stringLiteral","literal":"1st half"},{"node":"stringLiteral","literal":"2nd half"},{"node":"stringLiteral","literal":"Overtime"}],"caseElse":{"node":"stringLiteral","literal":"Unknown"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":629,"character":27},"end":{"line":629,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":27},"end":{"line":630,"character":38}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":630,"character":46},"end":{"line":630,"character":57}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":631,"character":27},"end":{"line":631,"character":38}}}}]},"expressionType":"scalar","code":"pick '1st half' when StartPeriod <= 2\n      pick '2nd half' when StartPeriod = 3 or StartPeriod = 4\n      pick 'Overtime' when StartPeriod >= 5\n      else 'Unknown'","annotations":{"notes":[{"text":"#(doc) Half the drive started in: 1st half, 2nd half, or Overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":627,"character":4},"end":{"line":627,"character":71}}}}]}},{"name":"time_of_possession_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":635,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":34},"end":{"line":635,"character":51}}}},{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":635,"character":59},"end":{"line":635,"character":76}}}}]},"expressionType":"scalar","code":"`Elapsed Minutes` * 60 + `Elapsed Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds of game clock the drive consumed, its time of possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":634,"character":4},"end":{"line":634,"character":77}}}}]}},{"name":"clock_seconds_at_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":638,"character":76}}},"e":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"field","path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},"right":{"node":"numberLiteral","literal":"60"}}},"right":{"node":"field","path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":30},"end":{"line":638,"character":49}}}},{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":638,"character":57},"end":{"line":638,"character":76}}}}]},"expressionType":"scalar","code":"`StartTime Minutes` * 60 + `StartTime Seconds`","annotations":{"notes":[{"text":"#(doc) Seconds left in the quarter when the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":637,"character":4},"end":{"line":637,"character":61}}}}]}},{"name":"yards_per_play_on_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":641,"character":55}}},"e":{"node":"/","kids":{"left":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":31},"end":{"line":641,"character":36}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":46},"end":{"line":641,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":641,"character":39},"end":{"line":641,"character":55}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"Yards / nullif(Plays, 0)","annotations":{"notes":[{"text":"#(doc) Yards gained per play on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":640,"character":4},"end":{"line":640,"character":47}}}}]}},{"name":"is_field_goal_attempt","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":650,"character":78}}},"e":{"node":"in","not":false,"kids":{"e":{"node":"field","path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}},"oneOf":[{"node":"stringLiteral","literal":"FG"},{"node":"stringLiteral","literal":"MISSED FG"},{"node":"stringLiteral","literal":"MISSED FG TD"}]}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":650,"character":29},"end":{"line":650,"character":40}}}}]},"expressionType":"scalar","code":"DriveResult ? 'FG' | 'MISSED FG' | 'MISSED FG TD'","annotations":{"notes":[{"text":"#(doc) True when the drive ended with a field goal attempt, made or missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":649,"character":4},"end":{"line":649,"character":80}}}}]}},{"name":"field_goal_distance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":655,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},"right":{"node":"numberLiteral","literal":"17"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":11},"end":{"line":654,"character":25}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":654,"character":36},"end":{"line":654,"character":57}}}}]},"expressionType":"scalar","code":"pick EndYardsToGoal + 17 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}},{"name":"field_goal_distance_band","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":660,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}],"caseThen":[{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["FLOOR(",")"]}}}},"name":"floor","kids":{"args":[{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},"right":{"node":"numberLiteral","literal":"17"}}}},"right":{"node":"numberLiteral","literal":"5"}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"5"}}},"right":{"node":"numberLiteral","literal":"2.5"}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":18},"end":{"line":659,"character":32}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":11},"end":{"line":659,"character":43}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":659,"character":59},"end":{"line":659,"character":80}}}}]},"expressionType":"scalar","code":"pick floor((EndYardsToGoal + 17) / 5) * 5 + 2.5 when is_field_goal_attempt\n      else null","annotations":{"notes":[{"text":"#(doc) Field goal distance rounded into five-yard bands and labelled with the middle of the band, so 42.5 covers attempts from 40 to 44 yards. Use it when comparing kicking curves for groups smaller than the whole league, where single-yard buckets are too thin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":657,"character":4},"end":{"line":657,"character":266}}}}]}},{"name":"field_goal_range","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":669,"character":22}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"30"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"40"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"50"}}},{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}},"right":{"node":"numberLiteral","literal":"17"}}},"right":{"node":"numberLiteral","literal":"60"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Chip shot"},{"node":"stringLiteral","literal":"Short"},{"node":"stringLiteral","literal":"Medium"},{"node":"stringLiteral","literal":"Long"}],"caseElse":{"node":"stringLiteral","literal":"Very long"}}},"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":664,"character":25},"end":{"line":664,"character":46}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":665,"character":28},"end":{"line":665,"character":42}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":666,"character":24},"end":{"line":666,"character":38}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":667,"character":25},"end":{"line":667,"character":39}}}},{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":668,"character":23},"end":{"line":668,"character":37}}}}]},"expressionType":"scalar","code":"pick null when not is_field_goal_attempt\n      pick 'Chip shot' when EndYardsToGoal + 17 < 30\n      pick 'Short' when EndYardsToGoal + 17 < 40\n      pick 'Medium' when EndYardsToGoal + 17 < 50\n      pick 'Long' when EndYardsToGoal + 17 < 60\n      else 'Very long'","annotations":{"notes":[{"text":"#(doc) Range band of the field goal attempt: Chip shot under 30 yards, Short 30 to 39, Medium 40 to 49, Long 50 to 59, and Very long at 60 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":662,"character":4},"end":{"line":662,"character":152}}}}]}},{"name":"chart_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":679,"character":66}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":43},"end":{"line":679,"character":56}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":34},"end":{"line":679,"character":60}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":679,"character":28},"end":{"line":679,"character":66}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardline, 0), 100)","annotations":{"notes":[{"text":"#(doc) Field stripe the drive started on for charting, in absolute field coordinates from 0 to 100, clamped into the field of play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":678,"character":4},"end":{"line":678,"character":136}}}}]}},{"name":"chart_end_yards_to_goal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":692,"character":80}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},"right":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":46},"end":{"line":692,"character":62}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":65},"end":{"line":692,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":37},"end":{"line":692,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":692,"character":31},"end":{"line":692,"character":80}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"least(greatest(StartYardsToGoal - Yards, 0), 100)","annotations":{"notes":[{"text":"#|(doc)\nDistance to the end zone where the OFFENSE's possession actually ended: its starting\ndistance less the net yards it gained, clamped into the field of play.\n\nNot the feed's EndYardsToGoal, which on a kick or a return is where the BALL came to\nrest afterwards. A punt is the clearest case: Arizona's 3-play, minus-14-yard\npossession at BYU in 2026 starts on its own 25 and the feed ends it on BYU's 11, 64\nyards downfield — the punt. Drawn from the feed the drive reads as a 64-yard march\ninstead of a three-and-out that lost ground. About a fifth of punts differ this way,\nby a punt's distance (34 to 46 yards), and interceptions differ by their return.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":681,"character":4},"end":{"line":691,"character":7}}},"indentStripped":6}]}},{"name":"chart_end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":702,"character":34}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}}}},{"node":"and","kids":{"left":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},"right":{"node":"not","e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}}}}},{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}}],"caseThen":[{"node":"numberLiteral","literal":"100"},{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}}}}],"caseElse":{"node":"field","path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}}},"refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":20},"end":{"line":699,"character":32}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":699,"character":37},"end":{"line":699,"character":50}}}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":18},"end":{"line":700,"character":30}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":700,"character":39},"end":{"line":700,"character":52}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":17},"end":{"line":701,"character":40}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":701,"character":46},"end":{"line":701,"character":59}}}},{"path":["chart_end_yards_to_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":702,"character":11},"end":{"line":702,"character":34}}}}]},"expressionType":"scalar","code":"pick 100 when is_touchdown and IsHomeOffense\n      pick 0 when is_touchdown and not IsHomeOffense\n      pick 100 - chart_end_yards_to_goal when IsHomeOffense\n      else chart_end_yards_to_goal","annotations":{"notes":[{"text":"#(doc) Field stripe the drive ended on for charting, in absolute field coordinates from 0 to 100: where the offense's possession ended, not where a punt or return left the ball. Touchdown drives are drawn all the way to the goal line the offense was attacking.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":694,"character":4},"end":{"line":694,"character":265}}}}]}},{"name":"chart_return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":717,"character":29}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},"right":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}}}},{"node":"field","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"100"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},{"node":"numberLiteral","literal":"100"}]},"expressionType":"scalar"}}}],"caseElse":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":26},"end":{"line":715,"character":31}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":17},"end":{"line":715,"character":35}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":11},"end":{"line":715,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":47},"end":{"line":715,"character":74}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":715,"character":79},"end":{"line":715,"character":92}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":32},"end":{"line":716,"character":37}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":23},"end":{"line":716,"character":41}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":17},"end":{"line":716,"character":47}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":716,"character":53},"end":{"line":716,"character":80}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":717,"character":11},"end":{"line":717,"character":29}}}}]},"expressionType":"scalar","code":"pick least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown and IsHomeOffense\n      pick 100 - least(greatest(Yards, 0), 100) when is_kickoff_return_touchdown\n      else chart_end_yardline","annotations":{"notes":[{"text":"#|(doc)\nField stripe a return touchdown started from, in absolute field coordinates.\n\nOn a KICKOFF return the feed gives the return's length in Yards (100 for BYU's\nsecond-half return against Utah Tech in 2026), and the returning team is this row's\nDefense, so the return is drawn its true length back from the goal line it reached.\nA punt or blocked-kick return has no return yardage anywhere in the feed — only the\npossession that preceded it — so it starts where that possession ended, which is a\nfloor on the return, not its real length.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":704,"character":4},"end":{"line":713,"character":7}}},"indentStripped":6}]}},{"name":"chart_direction","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":722,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}],"caseThen":[{"node":"stringLiteral","literal":"up"}],"caseElse":{"node":"stringLiteral","literal":"down"}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":721,"character":21},"end":{"line":721,"character":34}}}}]},"expressionType":"scalar","code":"pick 'up' when IsHomeOffense\n      else 'down'","annotations":{"notes":[{"text":"#(doc) Direction the offense was moving on the field chart: up toward 100 for the home team, down toward 0 for the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":719,"character":4},"end":{"line":719,"character":130}}}}]}},{"name":"margin_at_drive_start","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":741,"character":66}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":29},"end":{"line":741,"character":46}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":741,"character":49},"end":{"line":741,"character":66}}}}]},"expressionType":"scalar","code":"StartOffenseScore - StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score margin from the point of view of the team with the ball, as it stood when the drive began. Positive means the offense was ahead.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":740,"character":4},"end":{"line":740,"character":146}}}}]}},{"name":"deficit_at_drive_start","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":744,"character":72}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":34},"end":{"line":744,"character":51}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":54},"end":{"line":744,"character":71}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":744,"character":30},"end":{"line":744,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(StartOffenseScore - StartDefenseScore)","annotations":{"notes":[{"text":"#(doc) Points the trailing team was behind by when the drive began. Zero when the game was tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":743,"character":4},"end":{"line":743,"character":101}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":747,"character":68}}},"e":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":["possessions"]},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":747,"character":32},"end":{"line":747,"character":68}}}}]},"expressionType":"scalar","code":"possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game, counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":746,"character":4},"end":{"line":746,"character":97}}}}]}},{"name":"defense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":750,"character":102}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":32},"end":{"line":750,"character":63}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":750,"character":66},"end":{"line":750,"character":102}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game - possessions.offense_possessions_left","annotations":{"notes":[{"text":"#(doc) Number of possessions the defending team has left in the game after this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":749,"character":4},"end":{"line":749,"character":89}}}}]}},{"name":"losing_team_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":756,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},"right":{"node":"numberLiteral","literal":"0"}}},{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}},"right":{"node":"numberLiteral","literal":"0"}}}],"caseThen":[{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"node":"-","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},"right":{"node":"field","path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":53},"end":{"line":754,"character":74}}}},{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":45},"end":{"line":755,"character":81}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":87},"end":{"line":755,"character":108}}}}]},"expressionType":"scalar","code":"pick possessions.offense_possessions_left when margin_at_drive_start < 0\n      pick possessions.drives_left_in_game - possessions.offense_possessions_left when margin_at_drive_start > 0\n      else null","annotations":{"notes":[{"text":"#(doc) Number of possessions the trailing team has left to erase the deficit. Empty when the game is tied.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":752,"character":4},"end":{"line":752,"character":111}}}}]}},{"name":"ends_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":759,"character":52}}},"e":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":759,"character":17},"end":{"line":759,"character":48}}}}]},"expressionType":"scalar","code":"possessions.drives_left_in_game = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":758,"character":4},"end":{"line":758,"character":62}}}}]}},{"name":"ends_first_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":762,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 1 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of the first half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":761,"character":4},"end":{"line":761,"character":68}}}}]}},{"name":"ends_regulation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":765,"character":99}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":23},"end":{"line":765,"character":47}}}},{"path":["possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":765,"character":56},"end":{"line":765,"character":95}}}}]},"expressionType":"scalar","code":"possessions.period_group = 2 and possessions.drives_left_in_period_group = 1","annotations":{"notes":[{"text":"#(doc) True when this is the last possession of regulation, the end of the second half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":764,"character":4},"end":{"line":764,"character":92}}}}]}},{"name":"clock_ran_out","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":773,"character":45}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"not","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}}},"right":{"node":"not","e":{"node":"field","path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}}}}},"right":{"node":"not","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},"right":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},"right":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}}}}},"refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":769,"character":10},"end":{"line":769,"character":21}}}},{"path":["is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":10},"end":{"line":772,"character":25}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":772,"character":28},"end":{"line":772,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}}]},"expressionType":"scalar","code":"not is_turnover\n      and not is_turnover_on_downs\n      and not is_field_goal_attempt\n      and EndOffenseScore = StartOffenseScore\n      and EndDefenseScore = StartDefenseScore","annotations":{"notes":[{"text":"#(doc) True when the possession simply ran out of clock: no turnover, no points for either team, and no field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":767,"character":4},"end":{"line":767,"character":128}}}}]}},{"name":"is_garbage_end_of_half","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":778,"character":78}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"field","path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":"field","path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},"right":{"node":"numberLiteral","literal":"0"}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":6},"end":{"line":777,"character":11}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}}]},"expressionType":"scalar","code":"Plays <= 2 and clock_ran_out\n      and (ends_first_half or (ends_regulation and margin_at_drive_start = 0))","annotations":{"notes":[{"text":"#(doc) Garbage rule one: a possession of two plays or fewer that runs out the clock to end the first half, or to end regulation with the score tied, without a turnover, a score, or a field goal attempt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":775,"character":4},"end":{"line":775,"character":207}}}}]}},{"name":"is_garbage_out_of_reach","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":784,"character":71}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":">=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},"right":{"node":"numberLiteral","literal":"3"}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<","kids":{"left":{"node":"+","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"8"},"right":{"node":"field","path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}}}},"right":{"node":"numberLiteral","literal":"1"}}},"right":{"node":"field","path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}}}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":783,"character":10},"end":{"line":783,"character":31}}}},{"path":["losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}}]},"expressionType":"scalar","code":"StartPeriod >= 3\n      and margin_at_drive_start != 0\n      and 8 * losing_team_possessions_left + 1 < deficit_at_drive_start","annotations":{"notes":[{"text":"#(doc) Garbage rule two: a second-half possession where the game is already out of reach, because eight points times the trailing team's remaining possessions, plus one, is still less than the deficit.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":780,"character":4},"end":{"line":780,"character":206}}}}]}},{"name":"is_garbage_trailing_kneel","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":788,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"<=","kids":{"left":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},"right":{"node":"numberLiteral","literal":"2"}}},"right":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}},"right":{"node":"unary-","e":{"node":"numberLiteral","literal":"8"}}}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":6},"end":{"line":788,"character":11}}}},{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":35},"end":{"line":788,"character":48}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":53},"end":{"line":788,"character":74}}}}]},"expressionType":"scalar","code":"Plays <= 2 and ends_game and clock_ran_out and margin_at_drive_start < -8","annotations":{"notes":[{"text":"#(doc) Garbage rule three: a possession of two plays or fewer by a team trailing by more than eight that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":786,"character":4},"end":{"line":786,"character":145}}}}]}},{"name":"is_garbage_victory_formation","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":793,"character":66}}},"e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},"right":{"node":"field","path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},"right":{"node":"numberLiteral","literal":"0"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}},"right":{"node":"numberLiteral","literal":"8"}}}}},"refSummary":{"fieldUsage":[{"path":["ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":6},"end":{"line":792,"character":15}}}},{"path":["clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":792,"character":20},"end":{"line":792,"character":33}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":10},"end":{"line":793,"character":31}}}},{"path":["margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":793,"character":40},"end":{"line":793,"character":61}}}}]},"expressionType":"scalar","code":"ends_game and clock_ran_out\n      and margin_at_drive_start > 0 and margin_at_drive_start <= 8","annotations":{"notes":[{"text":"#(doc) Garbage rule four: the victory formation. A possession by the team ahead by eight points or fewer that runs out the clock to end the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":790,"character":4},"end":{"line":790,"character":150}}}}]}},{"name":"is_garbage_possession","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":806,"character":49}}},"e":{"node":"coalesce","kids":{"left":{"node":"()","e":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},"right":{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}}}},"right":{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}}}},"right":{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}}}},"right":{"node":"false"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}}]},"expressionType":"scalar","code":"(is_garbage_end_of_half\n        or is_garbage_out_of_reach\n        or is_garbage_trailing_kneel\n        or is_garbage_victory_formation) ?? false","annotations":{"notes":[{"text":"#|(doc)\nTrue when the possession is garbage time — neither team is still playing to win it.\nCovers all four of BCFtoys' rules: a kneel-down to end the first half or a tied\nregulation, a second-half possession with the game already out of reach, a kneel-down\nby a team trailing by more than eight, and the winning team's victory formation.\nAbout 16% of the season's drives, and half of all fourth-quarter possessions.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":795,"character":4},"end":{"line":801,"character":7}}},"indentStripped":6}]}},{"name":"garbage_reason","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":818,"character":24}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"node":"field","path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"node":"field","path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"node":"field","path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}],"caseThen":[{"node":"stringLiteral","literal":"End of half kneel-down"},{"node":"stringLiteral","literal":"Victory formation"},{"node":"stringLiteral","literal":"Trailing kneel-down"},{"node":"stringLiteral","literal":"Out of reach"}],"caseElse":{"node":"stringLiteral","literal":"Competitive"}}},"refSummary":{"fieldUsage":[{"path":["is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":814,"character":41},"end":{"line":814,"character":63}}}},{"path":["is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":815,"character":36},"end":{"line":815,"character":64}}}},{"path":["is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":816,"character":38},"end":{"line":816,"character":63}}}},{"path":["is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":817,"character":31},"end":{"line":817,"character":54}}}}]},"expressionType":"scalar","code":"pick 'End of half kneel-down' when is_garbage_end_of_half\n      pick 'Victory formation' when is_garbage_victory_formation\n      pick 'Trailing kneel-down' when is_garbage_trailing_kneel\n      pick 'Out of reach' when is_garbage_out_of_reach\n      else 'Competitive'","annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}},{"name":"drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":824,"character":26}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":824,"character":19},"end":{"line":824,"character":26}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":827,"character":31}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":18},"end":{"line":827,"character":31}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":827,"character":24},"end":{"line":827,"character":30}}}}]},"expressionType":"aggregate","code":"count(GameId)","annotations":{"notes":[{"text":"#(doc) Number of games the drives come from.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":826,"character":4},"end":{"line":826,"character":49}}}}]}},{"name":"play_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":830,"character":28}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":18},"end":{"line":830,"character":28}}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":830,"character":22},"end":{"line":830,"character":27}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays)","annotations":{"notes":[{"text":"#(doc) Total plays run.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":829,"character":4},"end":{"line":829,"character":28}}}}]}},{"name":"total_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":833,"character":29}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":19},"end":{"line":833,"character":29}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":833,"character":23},"end":{"line":833,"character":28}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards)","annotations":{"notes":[{"text":"#(doc) Total net yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":832,"character":4},"end":{"line":832,"character":35}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":836,"character":37}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":20},"end":{"line":836,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":836,"character":24},"end":{"line":836,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points)","annotations":{"notes":[{"text":"#(doc) Total points scored by the offense on these drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":835,"character":4},"end":{"line":835,"character":63}}}}]}},{"name":"points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":839,"character":62}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":24},"end":{"line":839,"character":41}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":51},"end":{"line":839,"character":58}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":44},"end":{"line":839,"character":62}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}},{"name":"yards_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":842,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":23},"end":{"line":842,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":43},"end":{"line":842,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":27},"end":{"line":842,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":842,"character":36},"end":{"line":842,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}},{"name":"plays_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":845,"character":54}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":23},"end":{"line":845,"character":33}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":43},"end":{"line":845,"character":50}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":27},"end":{"line":845,"character":32}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":845,"character":36},"end":{"line":845,"character":54}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Plays) / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}},{"name":"yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":848,"character":56}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":22},"end":{"line":848,"character":32}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"sum","e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":42},"end":{"line":848,"character":52}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":35},"end":{"line":848,"character":56}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Yards) / nullif(sum(Plays), 0)","annotations":{"notes":[{"text":"#(doc) Average yards gained per play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":847,"character":4},"end":{"line":847,"character":42}}}}]}},{"name":"scoring_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":852,"character":73}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":26},"end":{"line":852,"character":33}}}},"filterList":[{"node":"filterCondition","code":"Scoring","e":{"node":"field","path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":62},"end":{"line":852,"character":69}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":43},"end":{"line":852,"character":50}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":852,"character":55},"end":{"line":852,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: Scoring } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}},{"name":"touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":856,"character":74}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":22},"end":{"line":856,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":63},"end":{"line":856,"character":70}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":56},"end":{"line":856,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}},{"name":"field_goal_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":860,"character":76}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":23},"end":{"line":860,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":65},"end":{"line":860,"character":72}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":40},"end":{"line":860,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":860,"character":58},"end":{"line":860,"character":76}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a made field goal.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":858,"character":4},"end":{"line":858,"character":60}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":859,"character":4},"end":{"line":859,"character":14}}}}]}},{"name":"punt_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":864,"character":64}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":17},"end":{"line":864,"character":24}}}},"filterList":[{"node":"filterCondition","code":"is_punt","e":{"node":"field","path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":53},"end":{"line":864,"character":60}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_punt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":34},"end":{"line":864,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":864,"character":46},"end":{"line":864,"character":64}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_punt } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}},{"name":"turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":868,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":21},"end":{"line":868,"character":28}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":61},"end":{"line":868,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":54},"end":{"line":868,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_turnover } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}},{"name":"three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":872,"character":82}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":26},"end":{"line":872,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_three_and_out","e":{"node":"field","path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":71},"end":{"line":872,"character":78}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":64},"end":{"line":872,"character":82}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_three_and_out } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}},{"name":"red_zone_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":876,"character":77}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":21},"end":{"line":876,"character":28}}}},"filterList":[{"node":"filterCondition","code":"reached_red_zone","e":{"node":"field","path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":66},"end":{"line":876,"character":73}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["reached_red_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":38},"end":{"line":876,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":876,"character":59},"end":{"line":876,"character":77}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: reached_red_zone } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that reached the opponent's 20-yard line or closer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":874,"character":4},"end":{"line":874,"character":79}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":875,"character":4},"end":{"line":875,"character":14}}}}]}},{"name":"explosive_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":880,"character":86}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":28},"end":{"line":880,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_explosive_drive","e":{"node":"field","path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":75},"end":{"line":880,"character":82}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":68},"end":{"line":880,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_explosive_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of drives that gained 40 yards or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":878,"character":4},"end":{"line":878,"character":57}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":879,"character":4},"end":{"line":879,"character":14}}}}]}},{"name":"eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":884,"character":72}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":18},"end":{"line":884,"character":25}}}},"filterList":[{"node":"filterCondition","code":"is_eckel_drive","e":{"node":"field","path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":61},"end":{"line":884,"character":68}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":54},"end":{"line":884,"character":72}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_eckel_drive } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Eckel rate: share of drives that were quality possessions — a touchdown, or reaching the opponent's 35 after gaining at least ten yards. Measures how often an offense puts itself in position to score, separately from whether the kicker or the red zone finishes it. About 48% for Power Four offenses in 2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":882,"character":4},"end":{"line":882,"character":319}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":883,"character":4},"end":{"line":883,"character":14}}}}]}},{"name":"touchdown_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":887,"character":54}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":23},"end":{"line":887,"character":30}}}},"filterList":[{"node":"filterCondition","code":"is_touchdown","e":{"node":"field","path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":887,"character":40},"end":{"line":887,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: is_touchdown }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a touchdown.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":886,"character":4},"end":{"line":886,"character":55}}}}]}},{"name":"turnover_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":890,"character":52}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":22},"end":{"line":890,"character":29}}}},"filterList":[{"node":"filterCondition","code":"is_turnover","e":{"node":"field","path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":890,"character":39},"end":{"line":890,"character":50}}}}]},"expressionType":"aggregate","code":"count() { where: is_turnover }","annotations":{"notes":[{"text":"#(doc) Number of drives that ended in a giveaway by interception or fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":889,"character":4},"end":{"line":889,"character":80}}}}]}},{"name":"defensive_score_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":893,"character":66}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":29},"end":{"line":893,"character":36}}}},"filterList":[{"node":"filterCondition","code":"is_defensive_score","e":{"node":"field","path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":893,"character":46},"end":{"line":893,"character":64}}}}]},"expressionType":"aggregate","code":"count() { where: is_defensive_score }","annotations":{"notes":[{"text":"#(doc) Number of times the defense scored on a drive, by return touchdown or safety.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":892,"character":4},"end":{"line":892,"character":89}}}}]}},{"name":"avg_start_yards_to_goal","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":896,"character":52}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":31},"end":{"line":896,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":896,"character":35},"end":{"line":896,"character":51}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(StartYardsToGoal)","annotations":{"notes":[{"text":"#(doc) Average distance to the end zone at the start of a drive. Lower is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":895,"character":4},"end":{"line":895,"character":101}}}}]}},{"name":"avg_start_field_position","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":899,"character":57}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":32},"end":{"line":899,"character":57}}}},"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(start_field_position)","annotations":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}},{"name":"time_of_possession_minutes","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":902,"character":70}}},"e":{"node":"/","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":34},"end":{"line":902,"character":65}}}},"right":{"node":"numberLiteral","literal":"60"}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":902,"character":38},"end":{"line":902,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(time_of_possession_seconds) / 60","annotations":{"notes":[{"text":"#(doc) Total time of possession across these drives, in minutes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":901,"character":4},"end":{"line":901,"character":69}}}}]}},{"name":"avg_drive_seconds","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":905,"character":56}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":25},"end":{"line":905,"character":56}}}},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":905,"character":29},"end":{"line":905,"character":55}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(time_of_possession_seconds)","annotations":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}},{"name":"longest_drive_yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":908,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":27},"end":{"line":908,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":908,"character":31},"end":{"line":908,"character":36}}}}]},"expressionType":"aggregate","code":"max(Yards)","annotations":{"notes":[{"text":"#(doc) Longest drive by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":907,"character":4},"end":{"line":907,"character":42}}}}]}},{"name":"garbage_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":911,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":27},"end":{"line":911,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":911,"character":44},"end":{"line":911,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}},{"name":"garbage_drive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":915,"character":87}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":26},"end":{"line":915,"character":33}}}},"filterList":[{"node":"filterCondition","code":"is_garbage_possession","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":76},"end":{"line":915,"character":83}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":43},"end":{"line":915,"character":64}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":915,"character":69},"end":{"line":915,"character":87}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_garbage_possession } / nullif(count(), 0)","annotations":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}},{"name":"competitive_drive_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":918,"character":75}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":31},"end":{"line":918,"character":38}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":918,"character":52},"end":{"line":918,"character":73}}}}]},"expressionType":"aggregate","code":"count() { where: not is_garbage_possession }","annotations":{"notes":[{"text":"#(doc) Number of possessions that were still competitive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":917,"character":4},"end":{"line":917,"character":62}}}}]}},{"name":"competitive_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":923,"character":63}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":6},"end":{"line":922,"character":23}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":15},"end":{"line":923,"character":22}}}},"filterList":[{"node":"filterCondition","code":"not is_garbage_possession","e":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":10},"end":{"line":922,"character":22}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":922,"character":37},"end":{"line":922,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":36},"end":{"line":923,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":923,"character":8},"end":{"line":923,"character":63}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(drive_points) { where: not is_garbage_possession }\n      / nullif(count() { where: not is_garbage_possession }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per possession, counting only competitive possessions. The scoring rate with garbage time thrown out.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":920,"character":4},"end":{"line":920,"character":135}}}}]}},{"name":"field_goal_attempts","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":926,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":27},"end":{"line":926,"character":34}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":926,"character":44},"end":{"line":926,"character":65}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal_attempt }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}},{"name":"field_goal_make_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":930,"character":114}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":28},"end":{"line":930,"character":35}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":70},"end":{"line":930,"character":77}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":45},"end":{"line":930,"character":58}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":87},"end":{"line":930,"character":108}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":930,"character":63},"end":{"line":930,"character":114}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}},{"name":"field_goal_makes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":933,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":24},"end":{"line":933,"character":31}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":933,"character":41},"end":{"line":933,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: is_field_goal }","annotations":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":936,"character":130}}},"e":{"node":"/","kids":{"left":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"3.0"},"right":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":44},"end":{"line":936,"character":51}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal","e":{"node":"field","path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}}]},"isSourceFilter":false}]}}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":86},"end":{"line":936,"character":93}}}},"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt","e":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":61},"end":{"line":936,"character":74}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":103},"end":{"line":936,"character":124}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":936,"character":79},"end":{"line":936,"character":130}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"3.0 * count() { where: is_field_goal } / nullif(count() { where: is_field_goal_attempt }, 0)","annotations":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}},{"name":"avg_field_goal_distance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":939,"character":55}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":31},"end":{"line":939,"character":55}}}},"refSummary":{"fieldUsage":[{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":939,"character":35},"end":{"line":939,"character":54}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(field_goal_distance)","annotations":{"notes":[{"text":"#(doc) Average length of a field goal attempt in yards.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":938,"character":4},"end":{"line":938,"character":60}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":67,"character":4},"end":{"line":68,"character":37}}},"e":{"node":"field","path":["game","season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":68,"character":20},"end":{"line":68,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"season_label","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":68,"character":20},"end":{"line":68,"character":37}}}}]},"expressionType":"scalar","code":"game.season_label","annotations":{"notes":[{"text":"#(doc) Season the drive was played in, as text, for example 2026.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":67,"character":4},"end":{"line":67,"character":70}}}}]}},{"name":"home_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":30}}},"e":{"node":"field","path":["game","HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":71,"character":17},"end":{"line":71,"character":30}}}},"drillExpression":{"kind":"field_reference","name":"HomeTeam","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":71,"character":17},"end":{"line":71,"character":30}}}}]},"expressionType":"scalar","code":"game.HomeTeam","annotations":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}},{"name":"away_team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":74,"character":30}}},"e":{"node":"field","path":["game","AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":74,"character":17},"end":{"line":74,"character":30}}}},"drillExpression":{"kind":"field_reference","name":"AwayTeam","path":["game"]},"refSummary":{"fieldUsage":[{"path":["game","AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":74,"character":17},"end":{"line":74,"character":30}}}}]},"expressionType":"scalar","code":"game.AwayTeam","annotations":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-19469e3c-91a1-4f8e-aec6-9f9c92d8796b","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]},"accessModifier":"private"},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_drives","dialect":"duckdb","tablePath":"cfb_drives","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"GameId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"OffenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DefenseConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DefenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Scoring","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndPeriod","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndYardsToGoal","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndTime Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndTime Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Minutes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Minutes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Elapsed Seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Elapsed Seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"Yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"DriveResult","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"IsHomeOffense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"StartDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndOffenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}},{"name":"EndDefenseScore","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":22},"end":{"line":31,"character":48}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":31,"character":8},"end":{"line":31,"character":48}}},"parameters":{},"as":"drives_raw","annotations":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]},"sourceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","referenceID":"drives_raw@file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","arguments":{}},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":"|"},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(\n      GameId::string, '|', Offense, '|', StartPeriod::string, '|',\n      Plays::string, '|', Yards::string, '|', StartYardsToGoal::string\n    )","annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"drive_id"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["possession_shape"]},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: possession_shape, order_by: drive_id desc }","annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}}]},"isRepeated":true,"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES","e":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":12}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":17},"end":{"line":98,"character":29}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":15}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":88,"character":16},"end":{"line":88,"character":18}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":27},"end":{"line":92,"character":34}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":92,"character":41},"end":{"line":92,"character":52}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":26},"end":{"line":93,"character":31}}}},{"path":["StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":93,"character":46},"end":{"line":93,"character":62}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":91,"character":24},"end":{"line":94,"character":5}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":98,"character":74},"end":{"line":98,"character":82}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":83,"character":32},"end":{"line":105,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":85,"character":18},"end":{"line":85,"character":30}}}}]},"name":"QuerySource-19469e3c-91a1-4f8e-aec6-9f9c92d8796b","as":"dedupe","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":12},"end":{"line":109,"character":66}}},"annotations":{"blockNotes":[{"text":"#(doc) Marks each drive as either the copy the feed kept or a redundant synthetic restatement of a possession already present under its real id.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":82,"character":0},"end":{"line":82,"character":145}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":88,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive this verdict describes.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":87,"character":4},"end":{"line":87,"character":59}}}}]}},{"name":"possession_shape","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":94,"character":5}}},"annotations":{"notes":[{"text":"#(doc) The facts that make two rows the same possession: game, offense, period, plays, yards and starting field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":126}}}}]}},{"name":"copy_rank","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":98,"character":89}}},"annotations":{"notes":[{"text":"#(doc) Rank of this row among rows describing the same possession, real feed ids first. 1 is the copy to keep.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":97,"character":4},"end":{"line":97,"character":115}}}}]}},{"name":"is_redundant_copy","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":104,"character":55}}},"e":{"node":"and","kids":{"left":{"node":"<","kids":{"left":{"node":"field","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},"right":{"node":"numberLiteral","literal":"0"}}},"right":{"node":">","kids":{"left":{"node":"field","path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},"right":{"node":"numberLiteral","literal":"1"}}}}},"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}]},"expressionType":"scalar","code":"drive_id < 0 and copy_rank > 1","annotations":{"notes":[{"text":"#(doc) True when this row carries a synthetic negative id AND a real-id row describes the same possession, which makes it a duplicate to drop.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":103,"character":4},"end":{"line":103,"character":147}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_dedupe_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},"right":{"node":"field","path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":51},"end":{"line":109,"character":66}}}}]}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":108,"character":8},"end":{"line":113,"character":1}}},"parameters":{},"as":"drives_deduped","annotations":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true}],"sourceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","referenceID":"drives_deduped@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"},"pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}}]},"expressionType":"scalar","code":"Id","annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},"right":{"node":"numberLiteral","literal":"2"}}},{"node":"<=","kids":{"left":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"1"},{"node":"numberLiteral","literal":"2"}],"caseElse":{"node":"numberLiteral","literal":"3"}}},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}}]},"expressionType":"scalar","code":"pick 1 when StartPeriod <= 2\n      pick 2 when StartPeriod <= 4\n      else 3","annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"e":{"node":"field","path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartOffenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}}]},"expressionType":"scalar","code":"StartOffenseScore","annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"e":{"node":"field","path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"StartDefenseScore","path":[]},"refSummary":{"fieldUsage":[{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}}]},"expressionType":"scalar","code":"StartDefenseScore","annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}}],"caseThen":[{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}}],"caseElse":{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}}]},"expressionType":"scalar","code":"pick EndOffenseScore when IsHomeOffense\n      else EndDefenseScore","annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}}],"caseThen":[{"node":"field","path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}}],"caseElse":{"node":"field","path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}}},"refSummary":{"fieldUsage":[{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}}]},"expressionType":"scalar","code":"pick EndDefenseScore when IsHomeOffense\n      else EndOffenseScore","annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","Offense"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, Offense, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar_analytic","evalSpace":"input"},"params":[],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[]},"src":["ROW_NUMBER(",")"]},"needsWindowOrderBy":true}}},"name":"row_number","kids":{"args":[],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"},"dir":"desc"}]},"expressionType":"scalar_analytic","partitionBy":["GameId","period_group"]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"row_number() { partition_by: GameId, period_group, order_by: DriveNumber desc }","annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"Offense"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(Offense) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_offense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_offense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"start_defense_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(start_defense_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LEAD(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lead","kids":{"args":[{"node":"outputField","name":"raw_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lead(raw_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":119,"character":18}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}},"annotations":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}},"annotations":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":134,"character":12}}},"annotations":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":137,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":140,"character":44}}},"annotations":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}},{"name":"raw_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":145,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Home team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":142,"character":4},"end":{"line":142,"character":96}}}}]}},{"name":"raw_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":150,"character":26}}},"annotations":{"notes":[{"text":"#(doc) Away team's score as the feed reports it at the end of the drive, before any repair.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":96}}}}]}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":154,"character":92}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":157,"character":106}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":160,"character":114}}},"annotations":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":163,"character":81}}},"annotations":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":166,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":169,"character":105}}},"annotations":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}},{"name":"prev_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":172,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the previous possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":171,"character":4},"end":{"line":171,"character":99}}}}]}},{"name":"next_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":175,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Home team's reported score on the next possession, used to spot a scoreboard spike.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":174,"character":4},"end":{"line":174,"character":95}}}}]}},{"name":"prev_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":178,"character":90}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":177,"character":4},"end":{"line":177,"character":66}}}}]}},{"name":"next_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":181,"character":91}}},"annotations":{"notes":[{"text":"#(doc) Away team's reported score on the next possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":180,"character":4},"end":{"line":180,"character":62}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":133,"character":18},"end":{"line":133,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":11},"end":{"line":149,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":149,"character":32},"end":{"line":149,"character":45}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":150,"character":11},"end":{"line":150,"character":26}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":74},"end":{"line":154,"character":85}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":88},"end":{"line":157,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":157,"character":32},"end":{"line":157,"character":44}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":96},"end":{"line":160,"character":107}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":160,"character":35},"end":{"line":160,"character":47}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":25},"end":{"line":163,"character":32}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":68},"end":{"line":163,"character":79}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":163,"character":20},"end":{"line":163,"character":33}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":92},"end":{"line":166,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":32},"end":{"line":166,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":92},"end":{"line":169,"character":103}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":32},"end":{"line":169,"character":57}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":77},"end":{"line":172,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":23},"end":{"line":172,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":28},"end":{"line":175,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":78},"end":{"line":175,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":175,"character":23},"end":{"line":175,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":77},"end":{"line":178,"character":88}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":23},"end":{"line":178,"character":42}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":28},"end":{"line":181,"character":42}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":78},"end":{"line":181,"character":89}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":181,"character":23},"end":{"line":181,"character":43}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":119,"character":16},"end":{"line":119,"character":18}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":128,"character":4},"end":{"line":128,"character":15}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":132,"character":18},"end":{"line":132,"character":29}}}},{"path":["StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":137,"character":27},"end":{"line":137,"character":44}}}},{"path":["StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":140,"character":27},"end":{"line":140,"character":44}}}},{"path":["EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":11},"end":{"line":144,"character":26}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":144,"character":32},"end":{"line":144,"character":45}}}},{"path":["EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":145,"character":11},"end":{"line":145,"character":26}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":154,"character":27},"end":{"line":154,"character":39}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":166,"character":37},"end":{"line":166,"character":56}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":169,"character":37},"end":{"line":169,"character":56}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":172,"character":27},"end":{"line":172,"character":41}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":178,"character":27},"end":{"line":178,"character":41}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}}],"expandedGivenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}],"activeJoins":[{"path":["dedupe"]}],"expandedUngroupings":[]},{"type":"reduce","queryFields":[{"type":"fieldref","path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"drillExpression":{"kind":"field_reference","name":"drive_id","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"type":"fieldref","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"type":"fieldref","path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"drillExpression":{"kind":"field_reference","name":"period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"type":"fieldref","path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"type":"fieldref","path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"drillExpression":{"kind":"field_reference","name":"start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"type":"fieldref","path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"type":"fieldref","path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"drillExpression":{"kind":"field_reference","name":"offense_possessions_left","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"type":"fieldref","path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"drillExpression":{"kind":"field_reference","name":"drives_left_in_period_group","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"type":"fieldref","path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"drillExpression":{"kind":"field_reference","name":"next_offense","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"type":"fieldref","path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_offense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"type":"fieldref","path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"drillExpression":{"kind":"field_reference","name":"next_start_defense_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},"right":{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},"right":{"node":"field","path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}}],"caseElse":{"node":"field","path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_home_score\n        when prev_home_score is not null and next_home_score is not null\n          and raw_home_score > prev_home_score and raw_home_score > next_home_score\n      else raw_home_score","annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"is-not-null","e":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}}},"right":{"node":"is-not-null","e":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},"right":{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},"right":{"node":"field","path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}}}}}}],"caseThen":[{"node":"field","path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}}],"caseElse":{"node":"field","path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}}},"refSummary":{"fieldUsage":[{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}}]},"expressionType":"scalar","code":"pick prev_away_score\n        when prev_away_score is not null and next_away_score is not null\n          and raw_away_score > prev_away_score and raw_away_score > next_away_score\n      else raw_away_score","annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_home_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_home_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar_analytic","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","expressionType":"aggregate","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LAG(",")"]},"needsWindowOrderBy":true}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"},{"type":"boolean"}]}]},"name":"lag","kids":{"args":[{"node":"outputField","name":"despiked_away_score"}],"orderBy":[{"node":"functionOrderBy","e":{"node":"outputField","name":"DriveNumber"}}]},"expressionType":"scalar_analytic","partitionBy":["GameId"]},"refSummary":{"fieldUsage":[{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"ungroupings":[],"expressionType":"scalar_analytic","code":"lag(despiked_away_score) { partition_by: GameId, order_by: DriveNumber }","annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":13},"end":{"line":214,"character":28}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":31},"end":{"line":215,"character":46}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":51},"end":{"line":215,"character":65}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":68},"end":{"line":215,"character":83}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":216,"character":11},"end":{"line":216,"character":25}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":13},"end":{"line":221,"character":28}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":31},"end":{"line":222,"character":46}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":51},"end":{"line":222,"character":65}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":68},"end":{"line":222,"character":83}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":223,"character":11},"end":{"line":223,"character":25}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":91},"end":{"line":227,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":91},"end":{"line":230,"character":102}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":32},"end":{"line":230,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true}]},"defaultOrderBy":true,"orderBy":[{"field":"drive_id","dir":"asc"}],"expandedFieldUsage":[{"path":["drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}}},{"path":["period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}}},{"path":["start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}}},{"path":["start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}}},{"path":["drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}}},{"path":["offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}}},{"path":["drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}}},{"path":["next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}}},{"path":["next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}}},{"path":["next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}}},{"path":["prev_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":213,"character":11},"end":{"line":213,"character":26}}}},{"path":["next_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":214,"character":45},"end":{"line":214,"character":60}}}},{"path":["raw_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":215,"character":14},"end":{"line":215,"character":28}}}},{"path":["prev_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":220,"character":11},"end":{"line":220,"character":26}}}},{"path":["next_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":221,"character":45},"end":{"line":221,"character":60}}}},{"path":["raw_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":222,"character":14},"end":{"line":222,"character":28}}}},{"path":["despiked_home_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":36},"end":{"line":227,"character":55}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":227,"character":32},"end":{"line":227,"character":56}}},"uniqueKeyRequirement":{"isCount":false},"analyticFunctionUse":true},{"path":["despiked_away_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":230,"character":36},"end":{"line":230,"character":55}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":116,"character":36},"end":{"line":234,"character":1}}},"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"name":"QuerySource-726f8eb9-6025-4eb6-912d-da15c2f8c22b","as":"possessions","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":12},"end":{"line":344,"character":80}}},"annotations":{"blockNotes":[{"text":"#(doc) Possession counts for this drive: how many are left in the game, how many the team with the ball has left, and how many are left in this half.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":343,"character":2},"end":{"line":343,"character":152}}}}]},"fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":197,"character":4},"end":{"line":197,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the drive these counts describe. Join key back to the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":118,"character":4},"end":{"line":118,"character":86}}}}]}}},{"name":"GameId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":198,"character":4},"end":{"line":198,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Identifier of the game the drive belongs to.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":121,"character":4},"end":{"line":121,"character":56}}}}]}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":11}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":124,"character":4},"end":{"line":124,"character":44}}}}]}}},{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":200,"character":4},"end":{"line":200,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Drive number within the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":127,"character":4},"end":{"line":127,"character":41}}}}]}}},{"name":"period_group","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":201,"character":4},"end":{"line":201,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Segment of the game the drive belongs to: 1 for the first half, 2 for the second half, 3 for overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":130,"character":4},"end":{"line":130,"character":114}}}}]}}},{"name":"start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the team with the ball as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":136,"character":4},"end":{"line":136,"character":129}}}}]}}},{"name":"start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":203,"character":4},"end":{"line":203,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the defending team as the drive began, carried here so the next drive's copy can be compared against it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":139,"character":4},"end":{"line":139,"character":125}}}}]}}},{"name":"drives_left_in_game","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":204,"character":4},"end":{"line":204,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in the game counting this one, so the last drive of a game has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":153,"character":4},"end":{"line":153,"character":104}}}}]}}},{"name":"offense_possessions_left","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions the team with the ball has left in the game counting this one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":156,"character":4},"end":{"line":156,"character":96}}}}]}}},{"name":"drives_left_in_period_group","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":206,"character":4},"end":{"line":206,"character":31}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of possessions left in this half counting this one, so the last drive of a half has 1.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":159,"character":4},"end":{"line":159,"character":105}}}}]}}},{"name":"next_offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":207,"character":4},"end":{"line":207,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team with the ball on the next possession of the game. Empty on the last drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":91}}}}]}}},{"name":"next_start_offense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's offense as that drive began. Used to check this drive's ending scoreboard against the next drive's opening one.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":154}}}}]}}},{"name":"next_start_defense_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":209,"character":4},"end":{"line":209,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Score of the next possession's defense as that drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":168,"character":4},"end":{"line":168,"character":71}}}}]}}},{"name":"despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":216,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Home team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":115}}}}]}},{"name":"despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":223,"character":25}}},"annotations":{"notes":[{"text":"#(doc) Away team's score after the drive, with a scoreboard spike replaced by the previous possession's score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":218,"character":4},"end":{"line":218,"character":115}}}}]}},{"name":"prev_despiked_home_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":227,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired home score on the previous possession, so the ledger can be held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":226,"character":4},"end":{"line":226,"character":105}}}}]}},{"name":"prev_despiked_away_score","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":230,"character":104}}},"annotations":{"notes":[{"text":"#(doc) The repaired away score on the previous possession.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":229,"character":4},"end":{"line":229,"character":63}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"drive_id","dialect":"duckdb","sourceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","persistent":false,"referenceID":"drive_possession_context@file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},"right":{"node":"field","path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":55},"end":{"line":344,"character":57}}}},{"path":["possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}}]}},{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"query_source","query":{"type":"query","structRef":{"type":"table","name":"duckdb:cfb_games","dialect":"duckdb","tablePath":"cfb_games","connection":"duckdb","fields":[{"name":"Id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Season","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Week","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"SeasonType","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartDate","type":"timestamp","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"StartTimeTBD","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Completed","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"NeutralSite","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ConferenceGame","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"VenueId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Venue","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomeLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayId","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayTeam","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayClassification","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayConference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPoints","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayLineScores","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"ExcitementIndex","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Highlights","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Notes","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Competition","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Format","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff Round","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff RoundName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BracketSlot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"Playoff BowlName","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]}},{"name":"calc_periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":4},"end":{"line":44,"character":96}}},"e":{"node":"+","kids":{"left":{"node":"-","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["LENGTH(",")"]}}}},"name":"length","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"pattern","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false},{"name":"replacement","allowedTypes":[{"type":"string","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"},{"node":"function_parameter","name":"pattern"},{"node":"function_parameter","name":"replacement"}]},"src":["REPLACE(",",",",",")"]}}}},"name":"replace","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"node":"stringLiteral","literal":","},{"node":"stringLiteral","literal":""}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"right":{"node":"numberLiteral","literal":"1"}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"length(HomeLineScores) - length(replace(HomeLineScores, ',', '')) + 1"},{"name":"calc_home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":46,"character":4},"end":{"line":50,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when HomeLineScores is null\n      else coalesce(split_part!string(HomeLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(HomeLineScores, ',', 3):::number, 0)"},{"name":"calc_away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":52,"character":4},"end":{"line":56,"character":73}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"1"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"2"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"cast","dstType":{"type":"number"},"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"field","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"node":"stringLiteral","literal":","},{"node":"numberLiteral","literal":"3"}]},"src":["split_part(",",",",",")"]},"safe":true,"srcType":{"type":"string"}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"}}}}},"refSummary":{"fieldUsage":[{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when AwayLineScores is null\n      else coalesce(split_part!string(AwayLineScores, ',', 1):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 2):::number, 0)\n        + coalesce(split_part!string(AwayLineScores, ',', 3):::number, 0)"}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":8},"end":{"line":28,"character":46}}},"parameters":{},"as":"games_raw","annotations":{"blockNotes":[{"text":"#(doc) Every game of every season in the feed, one row per game, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":27,"character":0},"end":{"line":27,"character":95}}}}]},"arguments":{}},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":53,"character":21},"end":{"line":53,"character":35}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":38},"end":{"line":54,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":37},"end":{"line":55,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":55,"character":10},"end":{"line":55,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":56,"character":10},"end":{"line":56,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":38},"end":{"line":48,"character":52}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":48,"character":11},"end":{"line":48,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":37},"end":{"line":49,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":49,"character":10},"end":{"line":49,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":37},"end":{"line":50,"character":51}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":50,"character":10},"end":{"line":50,"character":73}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":34},"end":{"line":44,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":27},"end":{"line":44,"character":49}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":67},"end":{"line":44,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":59},"end":{"line":44,"character":91}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":44,"character":52},"end":{"line":44,"character":92}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}]},"expandedFieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":54,"character":11},"end":{"line":54,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":47,"character":21},"end":{"line":47,"character":35}}}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":28,"character":21},"end":{"line":28,"character":46}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":23},"end":{"line":57,"character":18}}},"givenUsage":[]},"name":"QuerySource-27ee7240-7d1d-45eb-880a-c83cb41a5984","as":"games_lines","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":42,"character":8},"end":{"line":57,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with the line score parsed: periods played and each team's points through three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":41,"character":0},"end":{"line":41,"character":103}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":57,"character":15},"end":{"line":57,"character":16}}}},{"name":"calc_margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":90}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}}},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three - calc_away_points_after_three"},{"name":"calc_is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":64,"character":4},"end":{"line":66,"character":98}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n      or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":86}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"35"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"28.0"}}}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"35 * greatest(0, 1 - abs(HomePoints - AwayPoints) / 28.0)"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":70,"character":4},"end":{"line":71,"character":112}}},"e":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"value"},"prefix":"","suffix":""}]},"src":["COALESCE(",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"coalesce","kids":{"args":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"20"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE GREATEST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE GREATEST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["GREATEST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE GREATEST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"greatest","kids":{"args":[{"node":"numberLiteral","literal":"0"},{"node":"-","kids":{"left":{"node":"numberLiteral","literal":"1"},"right":{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"17.0"}}}}}]},"expressionType":"scalar"}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"coalesce(20 * greatest(0, 1 - abs(calc_home_points_after_three - calc_away_points_after_three) / 17.0), 0)"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":73,"character":4},"end":{"line":77,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}}}},"right":{"node":">","kids":{"left":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},"right":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}}}}}}}}],"caseThen":[{"node":"numberLiteral","literal":"10"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}}]},"expressionType":"scalar","code":"pick 10 when\n        (HomePoints > AwayPoints and calc_home_points_after_three < calc_away_points_after_three)\n        or (AwayPoints > HomePoints and calc_home_points_after_three > calc_away_points_after_three)\n      else 0"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":4},"end":{"line":79,"character":71}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"numberLiteral","literal":"15"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}}]},"expressionType":"scalar","code":"pick 15 when calc_periods_played > 4 else 0"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":74}}},"e":{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"12"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"()","e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}}}}},"right":{"node":"numberLiteral","literal":"80.0"}}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"12 * least(1, (HomePoints + AwayPoints) / 80.0)"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":83,"character":4},"end":{"line":87,"character":12}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}}}}}}}}],"caseThen":[{"node":"*","kids":{"left":{"node":"numberLiteral","literal":"10"},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"1"},{"node":"/","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"250.0"}}}]},"expressionType":"scalar"}}}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expressionType":"scalar","code":"pick 10 * least(1, abs(HomePregameElo - AwayPregameElo) / 250.0) when\n        (HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n        or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)\n      else 0"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":4},"end":{"line":89,"character":78}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}}],"caseThen":[{"node":"numberLiteral","literal":"8"}],"caseElse":{"node":"numberLiteral","literal":"0"}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}}]},"expressionType":"scalar","code":"pick 8 when `Playoff Competition` is not null else 0"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_lines@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":10},"end":{"line":66,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":23},"end":{"line":66,"character":33}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":38},"end":{"line":66,"character":66}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":66,"character":69},"end":{"line":66,"character":97}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":59}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":62,"character":62},"end":{"line":62,"character":90}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":54},"end":{"line":68,"character":64}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":67},"end":{"line":68,"character":77}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":34},"end":{"line":68,"character":86}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":9},"end":{"line":75,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":22},"end":{"line":75,"character":32}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":37},"end":{"line":75,"character":65}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":75,"character":68},"end":{"line":75,"character":96}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":12},"end":{"line":76,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":25},"end":{"line":76,"character":35}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":40},"end":{"line":76,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":76,"character":71},"end":{"line":76,"character":99}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":40},"end":{"line":71,"character":68}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":71},"end":{"line":71,"character":99}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":36},"end":{"line":71,"character":100}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":20},"end":{"line":71,"character":108}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":71,"character":6},"end":{"line":71,"character":112}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":42},"end":{"line":81,"character":52}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":55},"end":{"line":81,"character":65}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":74}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":25},"end":{"line":84,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":16},"end":{"line":84,"character":70}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":9},"end":{"line":85,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":22},"end":{"line":85,"character":32}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":37},"end":{"line":85,"character":51}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":85,"character":54},"end":{"line":85,"character":68}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":12},"end":{"line":86,"character":22}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":35}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":40},"end":{"line":86,"character":54}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":86,"character":57},"end":{"line":86,"character":71}}}}]},"expandedFieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":7},"end":{"line":65,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":20},"end":{"line":65,"character":30}}}},{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":35},"end":{"line":65,"character":63}}}},{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":65,"character":66},"end":{"line":65,"character":94}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":68,"character":50},"end":{"line":68,"character":78}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":79,"character":41},"end":{"line":79,"character":60}}}},{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":89,"character":38},"end":{"line":89,"character":59}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":43}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":84,"character":46},"end":{"line":84,"character":60}}}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":30},"end":{"line":90,"character":18}}},"givenUsage":[]},"name":"QuerySource-e59ee81d-9b77-4852-bc4e-888ba06212b8","as":"games_thrill_parts","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":60,"character":8},"end":{"line":90,"character":18}}},"annotations":{"blockNotes":[{"text":"#(doc) Games with each part of the thrill index as its own column.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":59,"character":0},"end":{"line":59,"character":67}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":90,"character":15},"end":{"line":90,"character":16}}}},{"name":"calc_thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":95,"character":4},"end":{"line":100,"character":8}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"or","kids":{"left":{"node":"or","kids":{"left":{"node":"not","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}}},"right":{"node":"is-null","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}}}}},"right":{"node":"is-null","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}}}}}],"caseThen":[{"node":"null"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND((",")::NUMERIC)"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ROUND(",")"]}}}},"name":"round","kids":{"args":[{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN NUM_NULLS(",") > 0 THEN NULL ELSE LEAST(",") END"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN LEN(LIST_FILTER([","], x -> x is null)) > 0 THEN NULL ELSE LEAST(",") END"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["LEAST(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""},{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CASE WHEN SIZE(FILTER(ARRAY(","), x -> x IS NULL)) > 0 THEN NULL ELSE LEAST(",") END"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"least","kids":{"args":[{"node":"numberLiteral","literal":"100"},{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"+","kids":{"left":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},"right":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}}}},"right":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}}}},"right":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}}}},"right":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}}}},"right":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}}}},"right":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}}}}]},"expressionType":"scalar"}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick null when not Completed or HomePoints is null or AwayPoints is null\n      else round(least(100,\n        calc_thrill_closeness + calc_thrill_late_drama + calc_thrill_comeback + calc_thrill_overtime\n        + calc_thrill_scoring + calc_thrill_upset + calc_thrill_stakes\n      ))"}],"arguments":{},"parameters":{},"connection":"duckdb","dialect":"duckdb","persistent":false,"extends":"games_thrill_parts@file:///Users/timolsen/cfb-data/cfb-games/games.malloy"},"pipeline":[{"type":"project","queryFields":[{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Highlights"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeLineScores"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePostgameWinProbability"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Notes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff AwaySeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Format"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff HomeSeed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff Round"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["StartTimeTBD"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["VenueId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}}}]},"isRepeated":true,"filterList":[],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":11},"end":{"line":100,"character":8}}},"uniqueKeyRequirement":{"isCount":false}}]},"expandedFieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":25},"end":{"line":96,"character":34}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":38},"end":{"line":96,"character":48}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":96,"character":60},"end":{"line":96,"character":70}}}},{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":8},"end":{"line":98,"character":29}}}},{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":32},"end":{"line":98,"character":54}}}},{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":57},"end":{"line":98,"character":77}}}},{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":98,"character":80},"end":{"line":98,"character":100}}}},{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":10},"end":{"line":99,"character":29}}}},{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":32},"end":{"line":99,"character":49}}}},{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":99,"character":52},"end":{"line":99,"character":70}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":97,"character":17},"end":{"line":100,"character":7}}},"uniqueKeyRequirement":{"isCount":false}}],"expandedGivenUsage":[],"activeJoins":[],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":93,"character":24},"end":{"line":101,"character":18}}},"givenUsage":[]},"name":"QuerySource-e17c0923-432e-4a31-b391-e3f99c470349","as":"game","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":12},"end":{"line":63,"character":50}}},"annotations":{"blockNotes":[{"text":"#(doc) The game this drive was played in, with its date, teams, venue and final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":62,"character":2},"end":{"line":62,"character":89}}}}]},"fields":[{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Announced attendance for the game, in people. Missing for many games, especially at the Division II and Division III level.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":144,"character":4},"end":{"line":144,"character":135}}}}],"blockNotes":[]}},{"name":"AwayClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":191,"character":4},"end":{"line":191,"character":13}}}},{"text":"#(doc) Division the away team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":192,"character":4},"end":{"line":192,"character":102}}}}],"blockNotes":[]}},{"name":"AwayConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":195,"character":4},"end":{"line":195,"character":13}}}},{"text":"#(doc) Conference the away team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":196,"character":4},"end":{"line":196,"character":148}}}}],"blockNotes":[]}},{"name":"AwayId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":184,"character":4},"end":{"line":184,"character":47}}}}],"blockNotes":[]}},{"name":"AwayLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the away team scored in each period, as a comma-separated list in order, for example 3,7,7,0 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":202,"character":4},"end":{"line":202,"character":134}}}}],"blockNotes":[]}},{"name":"AwayPoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the away team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":199,"character":4},"end":{"line":199,"character":89}}}}],"blockNotes":[]}},{"name":"AwayPostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":211,"character":4},"end":{"line":211,"character":99}}}}],"blockNotes":[]}},{"name":"AwayPostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the away team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the home value to sum to 1 and is not the result itself.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":205,"character":4},"end":{"line":205,"character":194}}}}],"blockNotes":[]}},{"name":"AwayPregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Away team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":208,"character":4},"end":{"line":208,"character":106}}}}],"blockNotes":[]}},{"name":"AwayTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":187,"character":4},"end":{"line":187,"character":13}}}},{"text":"#(doc) Name of the away team, for example Michigan or Texas.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":188,"character":4},"end":{"line":188,"character":65}}}}],"blockNotes":[]}},{"name":"calc_away_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_home_points_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_is_comeback_win","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_margin_after_three","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_periods_played","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_closeness","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_comeback","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_index","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_late_drama","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_overtime","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_scoring","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_stakes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"calc_thrill_upset","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"accessModifier":"private"},{"name":"Completed","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game has been played and the final score is official.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":135,"character":4},"end":{"line":135,"character":79}}}}],"blockNotes":[]}},{"name":"ConferenceGame","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when both teams belong to the same conference, so the result counts in the conference standings.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":141,"character":4},"end":{"line":141,"character":113}}}}],"blockNotes":[]}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Excitement rating for the game, built from how much and how often the win probability swung. Typical games rate near 4; the wildest finishes rate above 8.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":214,"character":4},"end":{"line":214,"character":166}}}}],"blockNotes":[]}},{"name":"Highlights","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Link to the game's video highlights, when one is published.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":217,"character":4},"end":{"line":217,"character":71}}}}],"blockNotes":[]}},{"name":"HomeClassification","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":161,"character":4},"end":{"line":161,"character":13}}}},{"text":"#(doc) Division the home team competes in: fbs, fcs, ii for Division II, or iii for Division III.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":162,"character":4},"end":{"line":162,"character":102}}}}],"blockNotes":[]}},{"name":"HomeConference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":165,"character":4},"end":{"line":165,"character":13}}}},{"text":"#(doc) Conference the home team belongs to, for example SEC, Big Ten, ACC or Big 12. Missing for independents and some non-Division-I programs.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":166,"character":4},"end":{"line":166,"character":148}}}}],"blockNotes":[]}},{"name":"HomeId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":154,"character":4},"end":{"line":154,"character":47}}}}],"blockNotes":[]}},{"name":"HomeLineScores","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Points the home team scored in each period, as a comma-separated list in order, for example 7,10,0,14 for the four quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":172,"character":4},"end":{"line":172,"character":136}}}}],"blockNotes":[]}},{"name":"HomePoints","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Final points scored by the home team. Missing until the game has been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":169,"character":4},"end":{"line":169,"character":89}}}}],"blockNotes":[]}},{"name":"HomePostgameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating after the game, reflecting the result. Higher is stronger.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":181,"character":4},"end":{"line":181,"character":99}}}}],"blockNotes":[]}},{"name":"HomePostgameWinProbability","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Postgame win expectancy for the home team: how likely it was to win given how the game was played, from 0 to 1. It pairs with the away value to sum to 1 and is not the result itself — a team can lose a game it was 90% likely to win. Matches the actual winner in about 90% of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":175,"character":4},"end":{"line":175,"character":293}}}}],"blockNotes":[]}},{"name":"HomePregameElo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Home team's Elo power rating going into the game. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":178,"character":4},"end":{"line":178,"character":106}}}}],"blockNotes":[]}},{"name":"HomeTeam","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":157,"character":4},"end":{"line":157,"character":13}}}},{"text":"#(doc) Name of the home team, for example Alabama or Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":158,"character":4},"end":{"line":158,"character":69}}}}],"blockNotes":[]}},{"name":"Id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier for the game. Join key to the drives data, whose GameId column holds the same value.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":116,"character":4},"end":{"line":116,"character":114}}}}],"blockNotes":[]}},{"name":"NeutralSite","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the game was played at a neutral venue rather than either team's own stadium. Bowl games, playoff games and kickoff classics are typically neutral site.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":138,"character":4},"end":{"line":138,"character":174}}}}],"blockNotes":[]}},{"name":"Notes","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Free-text note about the game, usually the name of a kickoff event or a special circumstance, for example Aer Lingus College Football Classic.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":220,"character":4},"end":{"line":220,"character":154}}}}],"blockNotes":[]}},{"name":"Playoff AwaySeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the away team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":244,"character":4},"end":{"line":244,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff BowlName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":247,"character":4},"end":{"line":247,"character":13}}}},{"text":"#(doc) Bowl the playoff game was hosted by, for example Rose Bowl, Sugar Bowl or College Football Playoff National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":248,"character":4},"end":{"line":248,"character":133}}}}],"blockNotes":[]}},{"name":"Playoff BracketSlot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Slot the game occupies in the playoff bracket, for example QF1 for the first quarterfinal or CH for the championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":238,"character":4},"end":{"line":238,"character":129}}}}],"blockNotes":[]}},{"name":"Playoff Competition","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":223,"character":4},"end":{"line":223,"character":13}}}},{"text":"#(doc) Postseason competition the game belongs to. cfp for the College Football Playoff; missing for regular-season and ordinary bowl games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":224,"character":4},"end":{"line":224,"character":145}}}}],"blockNotes":[]}},{"name":"Playoff Format","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff bracket format in force for the season, for example twelve_team_2025.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":227,"character":4},"end":{"line":227,"character":89}}}}],"blockNotes":[]}},{"name":"Playoff HomeSeed","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Playoff seed of the home team, 1 through 12. Missing outside the playoff.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":241,"character":4},"end":{"line":241,"character":85}}}}],"blockNotes":[]}},{"name":"Playoff Round","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":230,"character":4},"end":{"line":230,"character":13}}}},{"text":"#(doc) Playoff round in machine form: first_round, quarterfinal, semifinal or championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":231,"character":4},"end":{"line":231,"character":96}}}}],"blockNotes":[]}},{"name":"Playoff RoundName","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":234,"character":4},"end":{"line":234,"character":13}}}},{"text":"#(doc) Playoff round in readable form: First Round, Quarterfinal, Semifinal or National Championship.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":235,"character":4},"end":{"line":235,"character":106}}}}],"blockNotes":[]}},{"name":"Season","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Season year the game belongs to: 2025 or 2026. A season's bowls and playoff games played in January still belong to the season that started in August.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":119,"character":4},"end":{"line":119,"character":162}}}}],"blockNotes":[]}},{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":125,"character":4},"end":{"line":125,"character":13}}}},{"text":"#(doc) Portion of the season: regular for the regular season, postseason for bowls and College Football Playoff games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":126,"character":4},"end":{"line":126,"character":123}}}}],"blockNotes":[]}},{"name":"StartDate","type":"timestamp","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Scheduled kickoff date and time, expressed in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":129,"character":4},"end":{"line":129,"character":80}}}}],"blockNotes":[]}},{"name":"StartTimeTBD","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) True when the kickoff time had not been announced yet, so only the date is meaningful.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":132,"character":4},"end":{"line":132,"character":98}}}}],"blockNotes":[]}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":150,"character":4},"end":{"line":150,"character":13}}}},{"text":"#(doc) Name of the stadium the game was played in, for example Bryant-Denny Stadium.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":151,"character":4},"end":{"line":151,"character":89}}}}],"blockNotes":[]}},{"name":"VenueId","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Unique identifier of the stadium the game was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":147,"character":4},"end":{"line":147,"character":68}}}}],"blockNotes":[]}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":101,"character":15},"end":{"line":101,"character":16}}},"annotations":{"notes":[{"text":"#(doc) Week of the season the game was played in, numbered within the season type. Regular-season weeks run 1 to 16; postseason bowl and playoff games carry their own week numbers.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":122,"character":4},"end":{"line":122,"character":185}}}}],"blockNotes":[]}},{"name":"game_date","type":"date","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":259,"character":32}}},"e":{"node":"cast","dstType":{"type":"date"},"e":{"node":"field","path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}},"safe":false,"srcType":{"type":"timestamp"}},"refSummary":{"fieldUsage":[{"path":["StartDate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":259,"character":17},"end":{"line":259,"character":26}}}}]},"expressionType":"scalar","code":"StartDate::date","annotations":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}},{"name":"matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":262,"character":49}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"node":"stringLiteral","literal":" at "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":22},"end":{"line":262,"character":30}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":40},"end":{"line":262,"character":48}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":262,"character":15},"end":{"line":262,"character":49}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(AwayTeam, ' at ', HomeTeam)","annotations":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}},{"name":"final_score","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":267,"character":93}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}}}}],"caseThen":[{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},"safe":false,"srcType":{"type":"number"}},{"node":"stringLiteral","literal":", "},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"node":"stringLiteral","literal":" "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":18},"end":{"line":266,"character":26}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":33},"end":{"line":266,"character":43}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":59},"end":{"line":266,"character":67}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":74},"end":{"line":266,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":11},"end":{"line":266,"character":93}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":99},"end":{"line":266,"character":109}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":266,"character":113},"end":{"line":266,"character":123}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":18},"end":{"line":267,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":33},"end":{"line":267,"character":43}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":59},"end":{"line":267,"character":67}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":74},"end":{"line":267,"character":84}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":267,"character":11},"end":{"line":267,"character":93}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick concat(HomeTeam, ' ', HomePoints::string, ', ', AwayTeam, ' ', AwayPoints::string) when HomePoints >= AwayPoints\n      else concat(AwayTeam, ' ', AwayPoints::string, ', ', HomeTeam, ' ', HomePoints::string)","annotations":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}},{"name":"winner","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":273,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":11},"end":{"line":271,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":25},"end":{"line":271,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":271,"character":38},"end":{"line":271,"character":48}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":11},"end":{"line":272,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":25},"end":{"line":272,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":272,"character":38},"end":{"line":272,"character":48}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePoints > AwayPoints\n      pick AwayTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}},{"name":"loser","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":279,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}}}],"caseThen":[{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":11},"end":{"line":277,"character":19}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":25},"end":{"line":277,"character":35}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":277,"character":38},"end":{"line":277,"character":48}}}},{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":11},"end":{"line":278,"character":19}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":25},"end":{"line":278,"character":35}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":278,"character":38},"end":{"line":278,"character":48}}}}]},"expressionType":"scalar","code":"pick AwayTeam when HomePoints > AwayPoints\n      pick HomeTeam when AwayPoints > HomePoints\n      else null","annotations":{"notes":[{"text":"#(doc) Team that lost the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":275,"character":4},"end":{"line":275,"character":92}}}}]}},{"name":"home_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":282,"character":39}}},"e":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":16},"end":{"line":282,"character":26}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":282,"character":29},"end":{"line":282,"character":39}}}}]},"expressionType":"scalar","code":"HomePoints > AwayPoints","annotations":{"notes":[{"text":"#(doc) True when the home team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":281,"character":4},"end":{"line":281,"character":40}}}}]}},{"name":"total_points","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":285,"character":43}}},"e":{"node":"+","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":20},"end":{"line":285,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":285,"character":33},"end":{"line":285,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints + AwayPoints","annotations":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}},{"name":"point_margin","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":288,"character":43}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":20},"end":{"line":288,"character":30}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":288,"character":33},"end":{"line":288,"character":43}}}}]},"expressionType":"scalar","code":"HomePoints - AwayPoints","annotations":{"notes":[{"text":"#(doc) Home points minus away points. Positive when the home team won, negative when the away team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":287,"character":4},"end":{"line":287,"character":108}}}}]}},{"name":"victory_margin","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":291,"character":50}}},"e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":26},"end":{"line":291,"character":36}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":39},"end":{"line":291,"character":49}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":291,"character":22},"end":{"line":291,"character":50}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"abs(HomePoints - AwayPoints)","annotations":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}},{"name":"margin_bucket","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":298,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"8"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"16"}}},{"node":"<=","kids":{"left":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"-","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}}}}]},"expressionType":"scalar"},"right":{"node":"numberLiteral","literal":"27"}}}],"caseThen":[{"node":"stringLiteral","literal":"One-score game"},{"node":"stringLiteral","literal":"Two-score game"},{"node":"stringLiteral","literal":"Comfortable"}],"caseElse":{"node":"stringLiteral","literal":"Blowout"}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":37},"end":{"line":295,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":50},"end":{"line":295,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":295,"character":33},"end":{"line":295,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":37},"end":{"line":296,"character":47}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":50},"end":{"line":296,"character":60}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":296,"character":33},"end":{"line":296,"character":61}}},"uniqueKeyRequirement":{"isCount":false}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":34},"end":{"line":297,"character":44}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":47},"end":{"line":297,"character":57}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":297,"character":30},"end":{"line":297,"character":58}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'One-score game' when abs(HomePoints - AwayPoints) <= 8\n      pick 'Two-score game' when abs(HomePoints - AwayPoints) <= 16\n      pick 'Comfortable' when abs(HomePoints - AwayPoints) <= 27\n      else 'Blowout'","annotations":{"notes":[{"text":"#(doc) How close the game was: One-score game for a margin of 8 or less, Two-score game for 9 to 16, Comfortable for 17 to 27, and Blowout for 28 or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":293,"character":4},"end":{"line":293,"character":159}}}}]}},{"name":"classification_matchup","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":301,"character":84}}},"e":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"node":"stringLiteral","literal":" vs "},{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}}]},"expressionType":"scalar"},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":37},"end":{"line":301,"character":55}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":65},"end":{"line":301,"character":83}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":301,"character":30},"end":{"line":301,"character":84}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"scalar","code":"concat(HomeClassification, ' vs ', AwayClassification)","annotations":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}},{"name":"is_fbs_matchup","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":304,"character":79}}},"e":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},"right":{"node":"stringLiteral","literal":"fbs"}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}},"right":{"node":"stringLiteral","literal":"fbs"}}}}},"refSummary":{"fieldUsage":[{"path":["HomeClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":22},"end":{"line":304,"character":40}}}},{"path":["AwayClassification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":304,"character":53},"end":{"line":304,"character":71}}}}]},"expressionType":"scalar","code":"HomeClassification = 'fbs' and AwayClassification = 'fbs'","annotations":{"notes":[{"text":"#(doc) True when both teams are FBS programs, the top division of college football.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":303,"character":4},"end":{"line":303,"character":88}}}}]}},{"name":"is_playoff_game","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":307,"character":56}}},"e":{"node":"is-not-null","e":{"node":"field","path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}},"refSummary":{"fieldUsage":[{"path":["Playoff Competition"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":307,"character":23},"end":{"line":307,"character":44}}}}]},"expressionType":"scalar","code":"`Playoff Competition` is not null","annotations":{"notes":[{"text":"#(doc) True when the game is part of the College Football Playoff bracket.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":306,"character":4},"end":{"line":306,"character":79}}}}]}},{"name":"pregame_elo_edge","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":310,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":24},"end":{"line":310,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":310,"character":41},"end":{"line":310,"character":55}}}}]},"expressionType":"scalar","code":"HomePregameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Home team's Elo rating minus the away team's Elo rating before kickoff. Positive means the home team was the stronger team on paper.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":309,"character":4},"end":{"line":309,"character":144}}}}]}},{"name":"elo_favorite","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":316,"character":15}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}}}},{"node":">","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}}}],"caseThen":[{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"node":"field","path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}}],"caseElse":{"node":"null"}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":11},"end":{"line":314,"character":19}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":25},"end":{"line":314,"character":39}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":314,"character":42},"end":{"line":314,"character":56}}}},{"path":["AwayTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":11},"end":{"line":315,"character":19}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":25},"end":{"line":315,"character":39}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":315,"character":42},"end":{"line":315,"character":56}}}}]},"expressionType":"scalar","code":"pick HomeTeam when HomePregameElo > AwayPregameElo\n      pick AwayTeam when AwayPregameElo > HomePregameElo\n      else null","annotations":{"notes":[{"text":"#(doc) Team the pregame Elo ratings favored, before any home-field adjustment.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":312,"character":4},"end":{"line":312,"character":83}}}}]}},{"name":"is_elo_upset","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":321,"character":70}}},"e":{"node":"or","kids":{"left":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}}}}}}},"right":{"node":"()","e":{"node":"and","kids":{"left":{"node":">","kids":{"left":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},"right":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}}}},"right":{"node":"<","kids":{"left":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":7},"end":{"line":320,"character":17}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":20},"end":{"line":320,"character":30}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":35},"end":{"line":320,"character":49}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":320,"character":52},"end":{"line":320,"character":66}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":10},"end":{"line":321,"character":20}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":23},"end":{"line":321,"character":33}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":38},"end":{"line":321,"character":52}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":321,"character":55},"end":{"line":321,"character":69}}}}]},"expressionType":"scalar","code":"(HomePoints > AwayPoints and HomePregameElo < AwayPregameElo)\n      or (AwayPoints > HomePoints and AwayPregameElo < HomePregameElo)","annotations":{"notes":[{"text":"#(doc) True when the team with the lower pregame Elo rating won the game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":318,"character":4},"end":{"line":318,"character":78}}}}]}},{"name":"home_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":324,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},"right":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":23},"end":{"line":324,"character":38}}}},{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":324,"character":41},"end":{"line":324,"character":55}}}}]},"expressionType":"scalar","code":"HomePostgameElo - HomePregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the home team gained from the game. Negative when the home team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":323,"character":4},"end":{"line":323,"character":109}}}}]}},{"name":"away_elo_change","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":327,"character":55}}},"e":{"node":"-","kids":{"left":{"node":"field","path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},"right":{"node":"field","path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}}},"refSummary":{"fieldUsage":[{"path":["AwayPostgameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":23},"end":{"line":327,"character":38}}}},{"path":["AwayPregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":327,"character":41},"end":{"line":327,"character":55}}}}]},"expressionType":"scalar","code":"AwayPostgameElo - AwayPregameElo","annotations":{"notes":[{"text":"#(doc) Points of Elo rating the away team gained from the game. Negative when the away team lost ground.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":326,"character":4},"end":{"line":326,"character":109}}}}]}},{"name":"excitement_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":334,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},"right":{"node":"numberLiteral","literal":"8"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},"right":{"node":"numberLiteral","literal":"6"}}},{"node":">","kids":{"left":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}},"right":{"node":"numberLiteral","literal":"4"}}}],"caseThen":[{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Competitive"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":331,"character":34},"end":{"line":331,"character":49}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":332,"character":27},"end":{"line":332,"character":42}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":333,"character":30},"end":{"line":333,"character":45}}}}]},"expressionType":"scalar","code":"pick 'Instant classic' when ExcitementIndex > 8\n      pick 'Thriller' when ExcitementIndex > 6\n      pick 'Competitive' when ExcitementIndex > 4\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) How dramatic the game was, from its excitement rating: Instant classic above 8, Thriller above 6, Competitive above 4, and Routine at 4 or below.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":329,"character":4},"end":{"line":329,"character":157}}}}]}},{"name":"season_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":340,"character":34}}},"e":{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}},"safe":false,"srcType":{"type":"number"}},"refSummary":{"fieldUsage":[{"path":["Season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":340,"character":20},"end":{"line":340,"character":26}}}}]},"expressionType":"scalar","code":"Season::string","annotations":{"notes":[{"text":"#(doc) Season year as text, for example 2026. What the season picker filters on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":339,"character":4},"end":{"line":339,"character":85}}}}]}},{"name":"week_label","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":347,"character":42}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"stringLiteral","literal":"Postseason"}],"caseElse":{"node":"function_call","overload":{"returnType":{"type":"string","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"values","allowedTypes":[{"type":"string","evalSpace":"input"},{"type":"number","evalSpace":"input"},{"type":"date","evalSpace":"input"},{"type":"timestamp","evalSpace":"input"},{"type":"boolean","evalSpace":"input"}],"isVariadic":true}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"CAST(","suffix":"AS VARCHAR)"}]},"src":["CONCAT(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"spread","e":{"node":"function_parameter","name":"values"},"prefix":"","suffix":""}]},"src":["CONCAT(",")"]}}}},"name":"concat","kids":{"args":[{"node":"stringLiteral","literal":"Week "},{"node":"cast","dstType":{"type":"string"},"e":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},"safe":false,"srcType":{"type":"number"}}]},"expressionType":"scalar"}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":346,"character":29},"end":{"line":346,"character":39}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":27},"end":{"line":347,"character":33}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":347,"character":11},"end":{"line":347,"character":42}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"scalar","code":"pick 'Postseason' when SeasonType = 'postseason'\n      else concat('Week ', `Week`::string)","annotations":{"notes":[{"text":"#(doc) The week as a reader names it: Week 1 through Week 16 in the regular season, and Postseason for every bowl and College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":342,"character":4},"end":{"line":342,"character":153}}}}]}},{"name":"week_sort","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":352,"character":17}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"=","kids":{"left":{"node":"field","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},"right":{"node":"stringLiteral","literal":"postseason"}}}],"caseThen":[{"node":"numberLiteral","literal":"100"}],"caseElse":{"node":"field","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}}},"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":351,"character":20},"end":{"line":351,"character":30}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":352,"character":11},"end":{"line":352,"character":17}}}}]},"expressionType":"scalar","code":"pick 100 when SeasonType = 'postseason'\n      else `Week`","annotations":{"notes":[{"text":"#(doc) Sort key for week_label, so Week 10 follows Week 9 and the postseason comes last.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":349,"character":4},"end":{"line":349,"character":93}}}}]}},{"name":"periods_played","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":363,"character":41}}},"e":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_periods_played","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":363,"character":22},"end":{"line":363,"character":41}}}}]},"expressionType":"scalar","code":"calc_periods_played","annotations":{"notes":[{"text":"#(doc) Number of periods the game went, from the line score: 4 for regulation, 5 or more when it went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":362,"character":4},"end":{"line":362,"character":119}}}}]}},{"name":"is_overtime","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":366,"character":42}}},"e":{"node":">","kids":{"left":{"node":"field","path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}},"right":{"node":"numberLiteral","literal":"4"}}},"refSummary":{"fieldUsage":[{"path":["calc_periods_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":366,"character":19},"end":{"line":366,"character":38}}}}]},"expressionType":"scalar","code":"calc_periods_played > 4","annotations":{"notes":[{"text":"#(doc) True when the game went to overtime.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":365,"character":4},"end":{"line":365,"character":48}}}}]}},{"name":"home_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":369,"character":59}}},"e":{"node":"field","path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_home_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_home_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":369,"character":31},"end":{"line":369,"character":59}}}}]},"expressionType":"scalar","code":"calc_home_points_after_three","annotations":{"notes":[{"text":"#(doc) Home team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":75}}}}]}},{"name":"away_points_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":372,"character":59}}},"e":{"node":"field","path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}},"drillExpression":{"kind":"field_reference","name":"calc_away_points_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_away_points_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":372,"character":31},"end":{"line":372,"character":59}}}}]},"expressionType":"scalar","code":"calc_away_points_after_three","annotations":{"notes":[{"text":"#(doc) Away team's points through three quarters, from the line score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":371,"character":4},"end":{"line":371,"character":75}}}}]}},{"name":"margin_after_three","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":375,"character":49}}},"e":{"node":"field","path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}},"drillExpression":{"kind":"field_reference","name":"calc_margin_after_three","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_margin_after_three"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":375,"character":26},"end":{"line":375,"character":49}}}}]},"expressionType":"scalar","code":"calc_margin_after_three","annotations":{"notes":[{"text":"#(doc) Home points minus away points going into the fourth quarter. Positive when the home team led.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":374,"character":4},"end":{"line":374,"character":105}}}}]}},{"name":"is_comeback_win","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":378,"character":43}}},"e":{"node":"field","path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_is_comeback_win","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_is_comeback_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":378,"character":23},"end":{"line":378,"character":43}}}}]},"expressionType":"scalar","code":"calc_is_comeback_win","annotations":{"notes":[{"text":"#(doc) True when the eventual winner was behind going into the fourth quarter.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":377,"character":4},"end":{"line":377,"character":83}}}}]}},{"name":"thrill_closeness","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":400,"character":45}}},"e":{"node":"field","path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_closeness","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_closeness"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":400,"character":24},"end":{"line":400,"character":45}}}}]},"expressionType":"scalar","code":"calc_thrill_closeness","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the final score was: 35 for a one-possession finish at a margin of zero, falling to 0 at a 28-point margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":399,"character":4},"end":{"line":399,"character":153}}}}]}},{"name":"thrill_late_drama","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":403,"character":47}}},"e":{"node":"field","path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_late_drama","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_late_drama"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":403,"character":25},"end":{"line":403,"character":47}}}}]},"expressionType":"scalar","code":"calc_thrill_late_drama","annotations":{"notes":[{"text":"#(doc) Thrill index points for how close the game was going into the fourth quarter: 20 when tied, falling to 0 at a 17-point margin. Zero when the line score is missing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":402,"character":4},"end":{"line":402,"character":175}}}}]}},{"name":"thrill_comeback","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":406,"character":43}}},"e":{"node":"field","path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_comeback","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_comeback"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":406,"character":23},"end":{"line":406,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_comeback","annotations":{"notes":[{"text":"#(doc) Thrill index points for a comeback: 10 when the winner trailed after three quarters.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":405,"character":4},"end":{"line":405,"character":96}}}}]}},{"name":"thrill_overtime","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":409,"character":43}}},"e":{"node":"field","path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_overtime","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_overtime"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":409,"character":23},"end":{"line":409,"character":43}}}}]},"expressionType":"scalar","code":"calc_thrill_overtime","annotations":{"notes":[{"text":"#(doc) Thrill index points for overtime: 15 when the game went past regulation.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":408,"character":4},"end":{"line":408,"character":84}}}}]}},{"name":"thrill_scoring","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":412,"character":41}}},"e":{"node":"field","path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_scoring","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":412,"character":22},"end":{"line":412,"character":41}}}}]},"expressionType":"scalar","code":"calc_thrill_scoring","annotations":{"notes":[{"text":"#(doc) Thrill index points for scoring: up to 12, reached at 80 combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":411,"character":4},"end":{"line":411,"character":85}}}}]}},{"name":"thrill_upset","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":415,"character":37}}},"e":{"node":"field","path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_upset","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":415,"character":20},"end":{"line":415,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_upset","annotations":{"notes":[{"text":"#(doc) Thrill index points for an upset: up to 10 when the team with the lower pregame Elo won, full marks at a 250-point rating gap.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":414,"character":4},"end":{"line":414,"character":138}}}}]}},{"name":"thrill_stakes","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":418,"character":39}}},"e":{"node":"field","path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_stakes","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_stakes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":418,"character":21},"end":{"line":418,"character":39}}}}]},"expressionType":"scalar","code":"calc_thrill_stakes","annotations":{"notes":[{"text":"#(doc) Thrill index points for stakes: 8 for a College Football Playoff game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":417,"character":4},"end":{"line":417,"character":82}}}}]}},{"name":"thrill_index","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":427,"character":37}}},"e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}},"drillExpression":{"kind":"field_reference","name":"calc_thrill_index","path":[]},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":427,"character":20},"end":{"line":427,"character":37}}}}]},"expressionType":"scalar","code":"calc_thrill_index","annotations":{"notes":[{"text":"#|(doc)\nHow exciting the game was, from 0 to 100, built from the box score so every completed\ngame has one: how close the final was, how close it was entering the fourth quarter,\nwhether the winner came from behind, overtime, combined scoring, an Elo upset, and\nplayoff stakes. Around 25 is a routine game; above 75 is an instant classic. Empty\nuntil the game is played.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":420,"character":4},"end":{"line":426,"character":7}}},"indentStripped":6}]}},{"name":"thrill_tier","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":435,"character":20}}},"e":{"node":"case","kids":{"caseWhen":[{"node":"is-null","e":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},"right":{"node":"numberLiteral","literal":"75"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},"right":{"node":"numberLiteral","literal":"55"}}},{"node":">=","kids":{"left":{"node":"field","path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}},"right":{"node":"numberLiteral","literal":"35"}}}],"caseThen":[{"node":"null"},{"node":"stringLiteral","literal":"Instant classic"},{"node":"stringLiteral","literal":"Thriller"},{"node":"stringLiteral","literal":"Good game"}],"caseElse":{"node":"stringLiteral","literal":"Routine"}}},"refSummary":{"fieldUsage":[{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":431,"character":21},"end":{"line":431,"character":38}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":432,"character":34},"end":{"line":432,"character":51}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":433,"character":27},"end":{"line":433,"character":44}}}},{"path":["calc_thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":434,"character":28},"end":{"line":434,"character":45}}}}]},"expressionType":"scalar","code":"pick null when calc_thrill_index is null\n      pick 'Instant classic' when calc_thrill_index >= 75\n      pick 'Thriller' when calc_thrill_index >= 55\n      pick 'Good game' when calc_thrill_index >= 35\n      else 'Routine'","annotations":{"notes":[{"text":"#(doc) Thrill index in words: Instant classic at 75 or more, Thriller at 55, Good game at 35, and Routine below that.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":429,"character":4},"end":{"line":429,"character":122}}}}]}},{"name":"game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":441,"character":25}}},"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":441,"character":18},"end":{"line":441,"character":25}}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}}]},"expressionType":"aggregate","code":"count()","annotations":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}},{"name":"completed_game_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":444,"character":56}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":28},"end":{"line":444,"character":35}}}},"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":444,"character":45},"end":{"line":444,"character":54}}}}]},"expressionType":"aggregate","code":"count() { where: Completed }","annotations":{"notes":[{"text":"#(doc) Number of games that have been played and have a final score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":443,"character":4},"end":{"line":443,"character":73}}}}]}},{"name":"points_scored","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":447,"character":54}}},"e":{"node":"+","kids":{"left":{"node":"aggregate","function":"sum","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":21},"end":{"line":447,"character":36}}}},"right":{"node":"aggregate","function":"sum","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":39},"end":{"line":447,"character":54}}}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":25},"end":{"line":447,"character":35}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":447,"character":43},"end":{"line":447,"character":53}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(HomePoints) + sum(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Total points scored by both teams across all games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":446,"character":4},"end":{"line":446,"character":63}}}}]}},{"name":"avg_total_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":450,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":24},"end":{"line":450,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":450,"character":28},"end":{"line":450,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(total_points)","annotations":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}},{"name":"avg_home_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":453,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":23},"end":{"line":453,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":453,"character":27},"end":{"line":453,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":452,"character":4},"end":{"line":452,"character":51}}}}]}},{"name":"avg_away_points","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":456,"character":38}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":23},"end":{"line":456,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":456,"character":27},"end":{"line":456,"character":37}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(AwayPoints)","annotations":{"notes":[{"text":"#(doc) Average points scored by the away team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":455,"character":4},"end":{"line":455,"character":51}}}}]}},{"name":"avg_victory_margin","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":459,"character":45}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":26},"end":{"line":459,"character":45}}}},"refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":459,"character":30},"end":{"line":459,"character":44}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"avg(victory_margin)","annotations":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}},{"name":"home_win_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":463,"character":119}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":21},"end":{"line":463,"character":28}}}},"filterList":[{"node":"filterCondition","code":"home_win","e":{"node":"field","path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":58},"end":{"line":463,"character":65}}}},"filterList":[{"node":"filterCondition","code":"Completed and HomePoints != AwayPoints","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},"right":{"node":"!=","kids":{"left":{"node":"field","path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},"right":{"node":"field","path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}}]},"isSourceFilter":false}]}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["home_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":38},"end":{"line":463,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":75},"end":{"line":463,"character":84}}}},{"path":["HomePoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":89},"end":{"line":463,"character":99}}}},{"path":["AwayPoints"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":103},"end":{"line":463,"character":113}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":463,"character":51},"end":{"line":463,"character":119}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: home_win } / nullif(count() { where: Completed and HomePoints != AwayPoints }, 0)","annotations":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}},{"name":"one_score_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":467,"character":99}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":27},"end":{"line":467,"character":34}}}},"filterList":[{"node":"filterCondition","code":"victory_margin <= 8","e":{"node":"<=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},"right":{"node":"numberLiteral","literal":"8"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":44},"end":{"line":467,"character":58}}}},{"path":["completed_game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":75},"end":{"line":467,"character":95}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":467,"character":68},"end":{"line":467,"character":99}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: victory_margin <= 8 } / nullif(completed_game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games decided by 8 points or fewer.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":465,"character":4},"end":{"line":465,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":466,"character":4},"end":{"line":466,"character":14}}}}]}},{"name":"blowout_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":470,"character":60}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":21},"end":{"line":470,"character":28}}}},"filterList":[{"node":"filterCondition","code":"victory_margin >= 28","e":{"node":">=","kids":{"left":{"node":"field","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}},"right":{"node":"numberLiteral","literal":"28"}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":470,"character":38},"end":{"line":470,"character":52}}}}]},"expressionType":"aggregate","code":"count() { where: victory_margin >= 28 }","annotations":{"notes":[{"text":"#(doc) Number of games decided by 28 points or more.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":469,"character":4},"end":{"line":469,"character":57}}}}]}},{"name":"upset_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":473,"character":50}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":19},"end":{"line":473,"character":26}}}},"filterList":[{"node":"filterCondition","code":"is_elo_upset","e":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":473,"character":36},"end":{"line":473,"character":48}}}}]},"expressionType":"aggregate","code":"count() { where: is_elo_upset }","annotations":{"notes":[{"text":"#(doc) Number of games in which the team with the lower pregame Elo rating won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":472,"character":4},"end":{"line":472,"character":84}}}}]}},{"name":"total_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":476,"character":39}}},"e":{"node":"aggregate","function":"sum","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":24},"end":{"line":476,"character":39}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":476,"character":28},"end":{"line":476,"character":38}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"sum(Attendance)","annotations":{"notes":[{"text":"#(doc) Total announced attendance across all games that reported it, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":475,"character":4},"end":{"line":475,"character":84}}}}]}},{"name":"avg_attendance","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":479,"character":37}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":22},"end":{"line":479,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":479,"character":26},"end":{"line":479,"character":36}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(Attendance)","annotations":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}},{"name":"max_attendance","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":482,"character":37}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":22},"end":{"line":482,"character":37}}}},"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":482,"character":26},"end":{"line":482,"character":36}}}}]},"expressionType":"aggregate","code":"max(Attendance)","annotations":{"notes":[{"text":"#(doc) Largest announced attendance for a single game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":481,"character":4},"end":{"line":481,"character":70}}}}]}},{"name":"avg_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":485,"character":42}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":22},"end":{"line":485,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":485,"character":26},"end":{"line":485,"character":41}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}},{"name":"max_excitement","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":488,"character":42}}},"e":{"node":"aggregate","function":"max","e":{"node":"field","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":22},"end":{"line":488,"character":42}}}},"refSummary":{"fieldUsage":[{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":488,"character":26},"end":{"line":488,"character":41}}}}]},"expressionType":"aggregate","code":"max(ExcitementIndex)","annotations":{"notes":[{"text":"#(doc) Highest excitement rating of any game in the group.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":487,"character":4},"end":{"line":487,"character":63}}}}]}},{"name":"avg_thrill_index","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":491,"character":41}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":24},"end":{"line":491,"character":41}}}},"refSummary":{"fieldUsage":[{"path":["thrill_index"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":491,"character":28},"end":{"line":491,"character":40}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(thrill_index)","annotations":{"notes":[{"text":"#(doc) Average thrill index across completed games, 0 to 100.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":490,"character":4},"end":{"line":490,"character":66}}}}]}},{"name":"neutral_site_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":495,"character":79}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":25},"end":{"line":495,"character":32}}}},"filterList":[{"node":"filterCondition","code":"NeutralSite","e":{"node":"field","path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["NeutralSite"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":42},"end":{"line":495,"character":53}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":65},"end":{"line":495,"character":75}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":495,"character":58},"end":{"line":495,"character":79}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: NeutralSite } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played at a neutral venue.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":493,"character":4},"end":{"line":493,"character":53}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":494,"character":4},"end":{"line":494,"character":14}}}}]}},{"name":"conference_game_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":499,"character":85}}},"e":{"node":"/","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"aggregate","function":"count","e":{"node":""},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":28},"end":{"line":499,"character":35}}}},"filterList":[{"node":"filterCondition","code":"ConferenceGame","e":{"node":"field","path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}}]},"isSourceFilter":false}]}},"right":{"node":"function_call","overload":{"returnType":{"type":"generic","generic":"T","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value1","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false},{"name":"value2","allowedTypes":[{"type":"generic","generic":"T","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value1"},{"node":"function_parameter","name":"value2"}]},"src":["NULLIF(",",",")"]}}},"genericTypes":[{"name":"T","acceptibleTypes":[{"type":"string"},{"type":"number"},{"type":"timestamp"},{"type":"date"},{"type":"json"}]}]},"name":"nullif","kids":{"args":[{"node":"field","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"node":"numberLiteral","literal":"0"}]},"expressionType":"aggregate"}}},"refSummary":{"fieldUsage":[{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["ConferenceGame"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":45},"end":{"line":499,"character":59}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":71},"end":{"line":499,"character":81}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":499,"character":64},"end":{"line":499,"character":85}}},"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"count() { where: ConferenceGame } / nullif(game_count, 0)","annotations":{"notes":[{"text":"#(doc) Share of games played between teams from the same conference.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":497,"character":4},"end":{"line":497,"character":73}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":498,"character":4},"end":{"line":498,"character":14}}}}]}},{"name":"avg_home_pregame_elo","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":502,"character":47}}},"e":{"node":"aggregate","function":"avg","e":{"node":"field","path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":28},"end":{"line":502,"character":47}}}},"refSummary":{"fieldUsage":[{"path":["HomePregameElo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":502,"character":32},"end":{"line":502,"character":46}}}},{"path":[],"uniqueKeyRequirement":{"isCount":false}}]},"expressionType":"aggregate","code":"avg(HomePregameElo)","annotations":{"notes":[{"text":"#(doc) Average pregame Elo rating of the home team. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":501,"character":4},"end":{"line":501,"character":101}}}}]}},{"name":"home_team_count","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":505,"character":38}}},"e":{"node":"aggregate","function":"distinct","e":{"node":"field","path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":23},"end":{"line":505,"character":38}}}},"refSummary":{"fieldUsage":[{"path":["HomeTeam"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":505,"character":29},"end":{"line":505,"character":37}}}}]},"expressionType":"aggregate","code":"count(HomeTeam)","annotations":{"notes":[{"text":"#(doc) Number of distinct teams appearing as the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":504,"character":4},"end":{"line":504,"character":64}}}}]}},{"type":"turtle","name":"by_week","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}},"drillExpression":{"kind":"field_reference","name":"SeasonType","path":[]}},{"type":"fieldref","path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}},"drillExpression":{"kind":"field_reference","name":"Week","path":[]}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_excitement","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"SeasonType","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"name":"Week","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"avg_excitement","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average excitement rating across games. Typical games rate near 4.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":484,"character":4},"end":{"line":484,"character":78}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"SeasonType"},{"field":"Week"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["SeasonType"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":14},"end":{"line":511,"character":24}}}},{"path":["Week"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":511,"character":26},"end":{"line":511,"character":32}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":15},"end":{"line":512,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":27},"end":{"line":512,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":45},"end":{"line":512,"character":63}}}},{"path":["avg_excitement"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":512,"character":65},"end":{"line":512,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games per week with scoring, margins and excitement, in schedule order. Answers how the season's weeks compare.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":509,"character":2},"end":{"line":509,"character":121}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":510,"character":8},"end":{"line":514,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}},"e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},"drillExpression":{"kind":"field_reference","name":"HomeConference","path":[]},"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}}]},"expressionType":"scalar","code":"HomeConference"},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"type":"fieldref","path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"drillExpression":{"kind":"field_reference","name":"home_win_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"type":"fieldref","path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"drillExpression":{"kind":"field_reference","name":"avg_attendance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":14},"end":{"line":519,"character":42}}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}},{"name":"home_win_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won by the home team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":461,"character":4},"end":{"line":461,"character":58}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":462,"character":4},"end":{"line":462,"character":14}}}}]}}},{"name":"avg_attendance","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average announced attendance per game, in people.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":478,"character":4},"end":{"line":478,"character":61}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"HomeConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":518,"character":11},"end":{"line":518,"character":25}}}},{"path":["HomeConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":519,"character":28},"end":{"line":519,"character":42}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":15},"end":{"line":520,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":27},"end":{"line":520,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":45},"end":{"line":520,"character":63}}}},{"path":["home_win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":65},"end":{"line":520,"character":78}}}},{"path":["avg_attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":520,"character":80},"end":{"line":520,"character":94}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Volume and scoring of games by the home team's conference, busiest conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":516,"character":2},"end":{"line":516,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":517,"character":8},"end":{"line":522,"character":3}}}},{"type":"turtle","name":"by_classification","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"drillExpression":{"kind":"field_reference","name":"classification_matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"type":"fieldref","path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"drillExpression":{"kind":"field_reference","name":"avg_victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"classification_matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Division matchup, for example fbs vs fbs or fbs vs fcs, using the two teams' divisions.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":300,"character":4},"end":{"line":300,"character":99}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}},{"name":"avg_victory_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average winning margin in points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":458,"character":4},"end":{"line":458,"character":45}}}}]}}}],"primaryKey":"classification_matchup"},"isRepeated":true,"orderBy":[{"field":"game_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["classification_matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":526,"character":14},"end":{"line":526,"character":36}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":15},"end":{"line":527,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":27},"end":{"line":527,"character":43}}}},{"path":["avg_victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":527,"character":45},"end":{"line":527,"character":63}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games by division matchup, for example FBS against FCS, showing how lopsided each type of matchup is.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":524,"character":2},"end":{"line":524,"character":111}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":525,"character":8},"end":{"line":529,"character":3}}}},{"type":"turtle","name":"most_exciting_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}},"drillExpression":{"kind":"field_reference","name":"ExcitementIndex","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"ExcitementIndex","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]},"isRepeated":true,"orderBy":[{"field":"ExcitementIndex","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":533,"character":11},"end":{"line":533,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":14},"end":{"line":534,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":25},"end":{"line":534,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":34},"end":{"line":534,"character":45}}}},{"path":["ExcitementIndex"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":534,"character":47},"end":{"line":534,"character":62}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The wildest finishes of the season, ranked by excitement rating.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":531,"character":2},"end":{"line":531,"character":74}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":532,"character":8},"end":{"line":537,"character":3}}}},{"type":"turtle","name":"biggest_blowouts","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"drillExpression":{"kind":"field_reference","name":"victory_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"victory_margin","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Winning margin in points, regardless of which team won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":290,"character":4},"end":{"line":290,"character":67}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"victory_margin","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":541,"character":11},"end":{"line":541,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":14},"end":{"line":542,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":25},"end":{"line":542,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":34},"end":{"line":542,"character":45}}}},{"path":["victory_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":542,"character":47},"end":{"line":542,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The most lopsided results of the season, ranked by winning margin.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":539,"character":2},"end":{"line":539,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":540,"character":8},"end":{"line":545,"character":3}}}},{"type":"turtle","name":"highest_scoring_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"drillExpression":{"kind":"field_reference","name":"total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"total_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Combined points scored by both teams.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":284,"character":4},"end":{"line":284,"character":49}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"total_points","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed","e":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":549,"character":11},"end":{"line":549,"character":20}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":14},"end":{"line":550,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":25},"end":{"line":550,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":34},"end":{"line":550,"character":45}}}},{"path":["total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":550,"character":47},"end":{"line":550,"character":59}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The highest-scoring games of the season, ranked by combined points.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":547,"character":2},"end":{"line":547,"character":77}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":548,"character":8},"end":{"line":553,"character":3}}}},{"type":"turtle","name":"best_attended_games","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}},"drillExpression":{"kind":"field_reference","name":"Venue","path":[]}},{"type":"fieldref","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}},"drillExpression":{"kind":"field_reference","name":"Attendance","path":[]}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"Venue","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"name":"Attendance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]},"isRepeated":true,"orderBy":[{"field":"Attendance","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Attendance is not null","e":{"node":"is-not-null","e":{"node":"field","path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":557,"character":11},"end":{"line":557,"character":21}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":14},"end":{"line":558,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":25},"end":{"line":558,"character":32}}}},{"path":["Venue"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":34},"end":{"line":558,"character":39}}}},{"path":["Attendance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":558,"character":41},"end":{"line":558,"character":51}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Best-attended games of the season, ranked by announced attendance.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":555,"character":2},"end":{"line":555,"character":76}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":556,"character":8},"end":{"line":561,"character":3}}}},{"type":"turtle","name":"biggest_upsets","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"type":"fieldref","path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"drillExpression":{"kind":"field_reference","name":"winner","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}},"e":{"node":"aggregate","function":"max","e":{"node":"function_call","overload":{"returnType":{"type":"number","expressionType":"scalar","evalSpace":"input"},"params":[{"name":"value","allowedTypes":[{"type":"number","evalSpace":"input"}],"isVariadic":false}],"dialect":{"postgres":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"standardsql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"duckdb":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"snowflake":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"trino":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"presto":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"mysql":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}},"databricks":{"e":{"node":"genericSQLExpr","kids":{"args":[{"node":"function_parameter","name":"value"}]},"src":["ABS(",")"]}}}},"name":"abs","kids":{"args":[{"node":"field","path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}}]},"expressionType":"scalar"},"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":26},"end":{"line":567,"character":52}}}},"refSummary":{"fieldUsage":[{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]},"ungroupings":[],"expressionType":"aggregate","code":"max(abs(pregame_elo_edge))"}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}},{"name":"winner","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Team that won the game. Empty for ties and for games that have not been played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":269,"character":4},"end":{"line":269,"character":91}}}}]}}},{"name":"elo_gap","type":"number","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":15},"end":{"line":567,"character":52}}}}]},"isRepeated":true,"orderBy":[{"field":"elo_gap","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"Completed and is_elo_upset","e":{"node":"and","kids":{"left":{"node":"field","path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},"right":{"node":"field","path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":11},"end":{"line":565,"character":20}}}},{"path":["is_elo_upset"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":565,"character":25},"end":{"line":565,"character":37}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":14},"end":{"line":566,"character":23}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":25},"end":{"line":566,"character":32}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":34},"end":{"line":566,"character":45}}}},{"path":["winner"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":566,"character":47},"end":{"line":566,"character":53}}}},{"path":["pregame_elo_edge"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":34},"end":{"line":567,"character":50}}}},{"path":[],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":567,"character":30},"end":{"line":567,"character":51}}},"uniqueKeyRequirement":{"isCount":false}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Games won by the team the pregame Elo ratings rated lower, biggest rating gap first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":563,"character":2},"end":{"line":563,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":564,"character":8},"end":{"line":570,"character":3}}}},{"type":"turtle","name":"playoff_bracket","pipeline":[{"type":"reduce","queryFields":[{"name":"round_name","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}},"e":{"node":"field","path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},"drillExpression":{"kind":"field_reference","name":"Playoff RoundName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}}]},"expressionType":"scalar","code":"`Playoff RoundName`"},{"name":"bracket_slot","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}},"e":{"node":"field","path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BracketSlot","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}}]},"expressionType":"scalar","code":"`Playoff BracketSlot`"},{"name":"bowl","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}},"e":{"node":"field","path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},"drillExpression":{"kind":"field_reference","name":"Playoff BowlName","path":[]},"refSummary":{"fieldUsage":[{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}}]},"expressionType":"scalar","code":"`Playoff BowlName`"},{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"drillExpression":{"kind":"field_reference","name":"matchup","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"type":"fieldref","path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"drillExpression":{"kind":"field_reference","name":"final_score","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"round_name","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":6},"end":{"line":576,"character":39}}}},{"name":"bracket_slot","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":6},"end":{"line":577,"character":43}}}},{"name":"bowl","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":6},"end":{"line":578,"character":32}}}},{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"matchup","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Matchup in away-at-home form, for example Michigan at Ohio State.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":261,"character":4},"end":{"line":261,"character":77}}}}]}}},{"name":"final_score","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Final score written out, for example Ohio State 30, Michigan 24, with the winner first. Empty until the game is played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":264,"character":4},"end":{"line":264,"character":131}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"bracket_slot"}],"filterList":[{"node":"filterCondition","code":"is_playoff_game","e":{"node":"field","path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_playoff_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":574,"character":11},"end":{"line":574,"character":26}}}},{"path":["Playoff RoundName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":576,"character":20},"end":{"line":576,"character":39}}}},{"path":["Playoff BracketSlot"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":577,"character":22},"end":{"line":577,"character":43}}}},{"path":["Playoff BowlName"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":578,"character":14},"end":{"line":578,"character":32}}}},{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":579,"character":6},"end":{"line":579,"character":15}}}},{"path":["matchup"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":580,"character":6},"end":{"line":580,"character":13}}}},{"path":["final_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":581,"character":6},"end":{"line":581,"character":17}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The College Football Playoff bracket in round order, with each game's result.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":572,"character":2},"end":{"line":572,"character":87}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":573,"character":8},"end":{"line":583,"character":3}}}},{"type":"turtle","name":"scoring_trend","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"drillExpression":{"kind":"field_reference","name":"game_date","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"type":"fieldref","path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"drillExpression":{"kind":"field_reference","name":"game_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"type":"fieldref","path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"drillExpression":{"kind":"field_reference","name":"avg_total_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"game_date","type":"date","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Calendar date the game kicked off, in US Pacific local time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":258,"character":4},"end":{"line":258,"character":72}}}}]}}},{"name":"game_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of games.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":440,"character":4},"end":{"line":440,"character":28}}}}]}}},{"name":"avg_total_points","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average combined points scored by both teams in a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":449,"character":4},"end":{"line":449,"character":67}}}}]}}}],"primaryKey":"game_date"},"isRepeated":true,"orderBy":[{"field":"game_date"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["game_date"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":587,"character":14},"end":{"line":587,"character":23}}}},{"path":["game_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":15},"end":{"line":588,"character":25}}}},{"path":["avg_total_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":588,"character":27},"end":{"line":588,"character":43}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Season shape week by week: how many games are played and how many points are scored.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":585,"character":2},"end":{"line":585,"character":94}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":586,"character":8},"end":{"line":590,"character":3}}}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"Id","dialect":"duckdb","persistent":false,"extends":"games_scored@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","sourceID":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","referenceID":"games_base@file:///Users/timolsen/cfb-data/cfb-games/games.malloy","join":"one","matrixOperation":"left","onExpression":{"node":"=","kids":{"left":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":34},"end":{"line":63,"character":40}}}},"right":{"node":"field","path":["game","Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":43},"end":{"line":63,"character":50}}}}}},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":34},"end":{"line":63,"character":40}}}},{"path":["game","Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":63,"character":43},"end":{"line":63,"character":50}}}}]}},{"type":"turtle","name":"offense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"type":"fieldref","path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"drillExpression":{"kind":"field_reference","name":"avg_start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":14},"end":{"line":945,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}},{"name":"avg_start_field_position","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average yard line a drive starts on, measured from the offense's own goal line. Higher is better field position.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":898,"character":4},"end":{"line":898,"character":124}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":945,"character":22},"end":{"line":945,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":15},"end":{"line":946,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":28},"end":{"line":946,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":46},"end":{"line":946,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":63},"end":{"line":946,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":79},"end":{"line":946,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":99},"end":{"line":946,"character":112}}}},{"path":["avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":946,"character":114},"end":{"line":946,"character":138}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":947,"character":12},"end":{"line":947,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by team, ranked by points per drive. The core offensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":943,"character":2},"end":{"line":943,"character":105}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":944,"character":8},"end":{"line":949,"character":3}}}},{"type":"turtle","name":"defense_leaderboard","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}}]},"expressionType":"scalar","code":"Defense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":14},"end":{"line":953,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"asc"}],"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":953,"character":22},"end":{"line":953,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":15},"end":{"line":954,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":28},"end":{"line":954,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":46},"end":{"line":954,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":63},"end":{"line":954,"character":77}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":79},"end":{"line":954,"character":97}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":954,"character":99},"end":{"line":954,"character":112}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":955,"character":12},"end":{"line":955,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Defensive drive efficiency by team, ranked by fewest points allowed per drive. The core defensive leaderboard.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":951,"character":2},"end":{"line":951,"character":120}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":952,"character":8},"end":{"line":957,"character":3}}}},{"type":"turtle","name":"by_result","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"type":"fieldref","path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"drillExpression":{"kind":"field_reference","name":"avg_drive_seconds","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}},{"name":"avg_drive_seconds","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average length of a drive in seconds of game clock.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":904,"character":4},"end":{"line":904,"character":63}}}}]}}}],"primaryKey":"result_category"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":961,"character":14},"end":{"line":961,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":15},"end":{"line":962,"character":26}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":28},"end":{"line":962,"character":43}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":45},"end":{"line":962,"character":60}}}},{"path":["avg_drive_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":962,"character":62},"end":{"line":962,"character":79}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How drives end across the season, most common outcome first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":959,"character":2},"end":{"line":959,"character":70}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":960,"character":8},"end":{"line":964,"character":3}}}},{"type":"turtle","name":"by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"drillExpression":{"kind":"field_reference","name":"scoring_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"scoring_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in points for either team.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":850,"character":4},"end":{"line":850,"character":65}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":851,"character":4},"end":{"line":851,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":968,"character":14},"end":{"line":968,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":15},"end":{"line":969,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":28},"end":{"line":969,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":46},"end":{"line":969,"character":61}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":63},"end":{"line":969,"character":81}}}},{"path":["scoring_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":969,"character":83},"end":{"line":969,"character":101}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Drive efficiency by quarter, showing how offenses change through a game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":966,"character":2},"end":{"line":966,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":967,"character":8},"end":{"line":971,"character":3}}}},{"type":"turtle","name":"by_start_field_position","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"drillExpression":{"kind":"field_reference","name":"start_field_position_zone","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"drillExpression":{"kind":"field_reference","name":"punt_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position_zone","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Where the drive started, in bands: Deep in own territory inside the own 10, Own territory to the own 39, Midfield from the own 40 to the opponent 40, and Plus territory inside the opponent 40.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":608,"character":4},"end":{"line":608,"character":204}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"punt_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":862,"character":4},"end":{"line":862,"character":49}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":863,"character":4},"end":{"line":863,"character":14}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}}],"primaryKey":"start_field_position_zone"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position_zone"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":975,"character":14},"end":{"line":975,"character":39}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":15},"end":{"line":976,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":28},"end":{"line":976,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":46},"end":{"line":976,"character":60}}}},{"path":["punt_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":62},"end":{"line":976,"character":71}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":976,"character":73},"end":{"line":976,"character":88}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much starting field position is worth: drive efficiency by where the drive began.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":973,"character":2},"end":{"line":973,"character":95}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":974,"character":8},"end":{"line":978,"character":3}}}},{"type":"turtle","name":"by_conference","pipeline":[{"type":"reduce","queryFields":[{"name":"conference","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}},"e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},"drillExpression":{"kind":"field_reference","name":"OffenseConference","path":[]},"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}}]},"expressionType":"scalar","code":"OffenseConference"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"type":"fieldref","path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"drillExpression":{"kind":"field_reference","name":"turnover_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":14},"end":{"line":983,"character":45}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}},{"name":"turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in an interception or a lost fumble.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":866,"character":4},"end":{"line":866,"character":75}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":867,"character":4},"end":{"line":867,"character":14}}}}]}}}],"primaryKey":"conference"},"isRepeated":true,"orderBy":[{"field":"points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"OffenseConference is not null","e":{"node":"is-not-null","e":{"node":"field","path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":982,"character":11},"end":{"line":982,"character":28}}}},{"path":["OffenseConference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":983,"character":28},"end":{"line":983,"character":45}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":15},"end":{"line":984,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":28},"end":{"line":984,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":46},"end":{"line":984,"character":61}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":63},"end":{"line":984,"character":77}}}},{"path":["turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":984,"character":79},"end":{"line":984,"character":92}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Offensive drive efficiency by conference, best scoring conference first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":980,"character":2},"end":{"line":980,"character":82}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":981,"character":8},"end":{"line":986,"character":3}}}},{"type":"turtle","name":"drive_log","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]}},{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"DriveNumber","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"DriveNumber"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":991,"character":6},"end":{"line":991,"character":17}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":992,"character":6},"end":{"line":992,"character":13}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":993,"character":6},"end":{"line":993,"character":19}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":994,"character":6},"end":{"line":994,"character":26}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":995,"character":6},"end":{"line":995,"character":11}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":996,"character":6},"end":{"line":996,"character":11}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":997,"character":6},"end":{"line":997,"character":21}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":998,"character":6},"end":{"line":998,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":999,"character":6},"end":{"line":999,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every drive of a game in order, with field position, result and the score afterwards. The drive-by-drive game log.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":988,"character":2},"end":{"line":988,"character":124}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":989,"character":8},"end":{"line":1001,"character":3}}}},{"type":"turtle","name":"longest_scoring_drives","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]}},{"type":"fieldref","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]}},{"type":"fieldref","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]}},{"type":"fieldref","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]}},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"Offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"name":"Defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"name":"Yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"name":"Plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"Yards","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"is_offensive_score","e":{"node":"field","path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_offensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1005,"character":11},"end":{"line":1005,"character":29}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":14},"end":{"line":1006,"character":21}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":23},"end":{"line":1006,"character":30}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":32},"end":{"line":1006,"character":37}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":39},"end":{"line":1006,"character":44}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1006,"character":46},"end":{"line":1006,"character":61}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) The longest scoring drives of the season, by yards gained.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1003,"character":2},"end":{"line":1003,"character":68}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1004,"character":8},"end":{"line":1009,"character":3}}}},{"type":"turtle","name":"field_goal_expected_points","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"drillExpression":{"kind":"field_reference","name":"field_goal_distance","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"type":"fieldref","path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"drillExpression":{"kind":"field_reference","name":"field_goal_attempts","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"type":"fieldref","path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"drillExpression":{"kind":"field_reference","name":"field_goal_makes","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"type":"fieldref","path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"drillExpression":{"kind":"field_reference","name":"expected_points_per_fg_attempt","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"type":"fieldref","path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"drillExpression":{"kind":"field_reference","name":"field_goal_make_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"field_goal_distance","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Length of the field goal attempt in yards, counted from the holder's spot through the back of the end zone: the ball's distance to the goal line plus 17. Empty on drives that did not end in a kick.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":652,"character":4},"end":{"line":652,"character":209}}}}]}}},{"name":"field_goal_attempts","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts, made and missed.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":925,"character":4},"end":{"line":925,"character":59}}}}]}}},{"name":"field_goal_makes","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":932,"character":4},"end":{"line":932,"character":57}}}}]}}},{"name":"expected_points_per_fg_attempt","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per field goal attempt: three points for a make, none for a miss, so it is the make rate times three. This is the expected value of taking the kick. Counted from the result of the kick rather than the score columns, which are out of sync on about 2% of kicking drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":935,"character":4},"end":{"line":935,"character":302}}}}]}}},{"name":"field_goal_make_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of field goal attempts that were made.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":928,"character":4},"end":{"line":928,"character":56}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":929,"character":4},"end":{"line":929,"character":14}}}}]}}}],"primaryKey":"field_goal_distance"},"isRepeated":true,"orderBy":[{"field":"field_goal_distance"}],"filterList":[{"node":"filterCondition","code":"is_field_goal_attempt and field_goal_distance >= 17 and field_goal_distance <= 70","e":{"node":"and","kids":{"left":{"node":"and","kids":{"left":{"node":"field","path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},"right":{"node":">=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},"right":{"node":"numberLiteral","literal":"17"}}}}},"right":{"node":"<=","kids":{"left":{"node":"field","path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},"right":{"node":"numberLiteral","literal":"70"}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":11},"end":{"line":1019,"character":32}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":37},"end":{"line":1019,"character":56}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1019,"character":67},"end":{"line":1019,"character":86}}}},{"path":["field_goal_distance"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1020,"character":14},"end":{"line":1020,"character":33}}}},{"path":["field_goal_attempts"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1022,"character":6},"end":{"line":1022,"character":25}}}},{"path":["field_goal_makes"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1023,"character":6},"end":{"line":1023,"character":22}}}},{"path":["expected_points_per_fg_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1024,"character":6},"end":{"line":1024,"character":36}}}},{"path":["field_goal_make_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1025,"character":6},"end":{"line":1025,"character":26}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nExpected points of a field goal attempt by kick distance: for every attempt length,\nhow many points the attempt is worth on average (three times the make rate). The\nscoring curve kickers are judged against, and the input to any go-for-it decision.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1011,"character":2},"end":{"line":1015,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1016,"character":8},"end":{"line":1027,"character":3}}}},{"type":"turtle","name":"points_by_start_yardline","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"drillExpression":{"kind":"field_reference","name":"touchdown_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended in a touchdown by the offense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":854,"character":4},"end":{"line":854,"character":69}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":855,"character":4},"end":{"line":855,"character":14}}}}]}}}],"primaryKey":"start_field_position"},"isRepeated":true,"orderBy":[{"field":"start_field_position"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1036,"character":14},"end":{"line":1036,"character":34}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":15},"end":{"line":1037,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":28},"end":{"line":1037,"character":44}}}},{"path":["touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1037,"character":46},"end":{"line":1037,"character":60}}}}]}}],"annotations":{"blockNotes":[{"text":"#|(doc)\nWhat a yard of field position is worth: average points scored per drive by the yard\nline the drive started on, measured from the offense's own goal line. Rises steadily\nfrom about 1.2 points starting on your own 1 to about 4 points starting inside the\nopponent's 35.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1029,"character":2},"end":{"line":1034,"character":5}}},"indentStripped":4}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1035,"character":8},"end":{"line":1039,"character":3}}}},{"type":"turtle","name":"garbage_time_breakdown","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"drillExpression":{"kind":"field_reference","name":"garbage_reason","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"type":"fieldref","path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"drillExpression":{"kind":"field_reference","name":"yards_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"type":"fieldref","path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"drillExpression":{"kind":"field_reference","name":"plays_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"garbage_reason","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":808,"character":4},"end":{"line":808,"character":13}}}},{"text":"#(doc) Why the possession counts as garbage time: End of half kneel-down, Victory formation, Trailing kneel-down, or Out of reach. Competitive for everything else.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":809,"character":4},"end":{"line":809,"character":168}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}},{"name":"yards_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average net yards gained per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":841,"character":4},"end":{"line":841,"character":47}}}}]}}},{"name":"plays_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average number of plays per drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":844,"character":4},"end":{"line":844,"character":46}}}}]}}}],"primaryKey":"garbage_reason"},"isRepeated":true,"orderBy":[{"field":"drive_count","dir":"desc"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["garbage_reason"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1043,"character":14},"end":{"line":1043,"character":28}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":15},"end":{"line":1044,"character":26}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":28},"end":{"line":1044,"character":44}}}},{"path":["yards_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":46},"end":{"line":1044,"character":61}}}},{"path":["plays_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1044,"character":63},"end":{"line":1044,"character":78}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) How much of the season is garbage time, broken out by the rule that classified each possession, and how differently those possessions play.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1041,"character":2},"end":{"line":1041,"character":149}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1042,"character":8},"end":{"line":1046,"character":3}}}},{"type":"turtle","name":"garbage_time_by_quarter","pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"type":"fieldref","path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"drillExpression":{"kind":"field_reference","name":"garbage_drive_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"garbage_drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of garbage-time possessions, where neither team is still playing to win.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":910,"character":4},"end":{"line":910,"character":91}}}}]}}},{"name":"garbage_drive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of possessions that are garbage time.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":913,"character":4},"end":{"line":913,"character":55}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":914,"character":4},"end":{"line":914,"character":14}}}}]}}}],"primaryKey":"quarter_label"},"isRepeated":true,"orderBy":[{"field":"quarter_label"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1050,"character":14},"end":{"line":1050,"character":27}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":15},"end":{"line":1051,"character":26}}}},{"path":["garbage_drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":28},"end":{"line":1051,"character":47}}}},{"path":["garbage_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1051,"character":49},"end":{"line":1051,"character":67}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Garbage time by quarter — where in a game the possessions that no longer matter actually happen.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1048,"character":2},"end":{"line":1048,"character":106}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1049,"character":8},"end":{"line":1053,"character":3}}}},{"type":"turtle","name":"worst_three_and_out_offenses","pipeline":[{"type":"reduce","queryFields":[{"name":"team","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}}]},"expressionType":"scalar","code":"Offense"},{"type":"fieldref","path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"drillExpression":{"kind":"field_reference","name":"drive_count","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"type":"fieldref","path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"drillExpression":{"kind":"field_reference","name":"three_and_out_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"drillExpression":{"kind":"field_reference","name":"points_per_drive","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":14},"end":{"line":1057,"character":29}}}},{"name":"drive_count","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of drives.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":823,"character":4},"end":{"line":823,"character":29}}}}]}}},{"name":"three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of drives that ended with three plays or fewer and a punt.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":870,"character":4},"end":{"line":870,"character":76}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":871,"character":4},"end":{"line":871,"character":14}}}}]}}},{"name":"points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points the offense scores per drive, the standard measure of drive efficiency.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":838,"character":4},"end":{"line":838,"character":98}}}}]}}}],"primaryKey":"team"},"isRepeated":true,"orderBy":[{"field":"three_and_out_rate","dir":"desc"}],"limit":25,"filterList":[{"node":"filterCondition","code":"drive_count > 100","e":{"node":">","kids":{"left":{"node":"outputField","name":"drive_count"},"right":{"node":"numberLiteral","literal":"100"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1057,"character":22},"end":{"line":1057,"character":29}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":15},"end":{"line":1058,"character":26}}}},{"path":["three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":28},"end":{"line":1058,"character":46}}}},{"path":["points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1058,"character":48},"end":{"line":1058,"character":64}}}},{"path":["drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1059,"character":12},"end":{"line":1059,"character":23}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Teams whose drives most often end in a three-and-out punt, worst offenses first.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1055,"character":2},"end":{"line":1055,"character":90}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1056,"character":8},"end":{"line":1062,"character":3}}}},{"type":"turtle","name":"game_drive_chart","pipeline":[{"type":"reduce","queryFields":[{"name":"drive_id","type":"number","numberType":"bigint","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":6},"end":{"line":79,"character":20}}},"e":{"node":"field","path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Id","path":[]},"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}}]},"expressionType":"scalar","code":"Id"},{"name":"game_id","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":6},"end":{"line":80,"character":23}}},"e":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}},"drillExpression":{"kind":"field_reference","name":"GameId","path":[]},"refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}}]},"expressionType":"scalar","code":"GameId"},{"type":"fieldref","path":["home_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}},"drillExpression":{"kind":"field_reference","name":"home_team","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}}},{"type":"fieldref","path":["away_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}},"drillExpression":{"kind":"field_reference","name":"away_team","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}}},{"name":"drive_number","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":6},"end":{"line":83,"character":33}}},"e":{"node":"field","path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}},"drillExpression":{"kind":"field_reference","name":"DriveNumber","path":[]},"refSummary":{"fieldUsage":[{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}}]},"expressionType":"scalar","code":"DriveNumber"},{"name":"offense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":6},"end":{"line":84,"character":24}}},"e":{"node":"field","path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}},"drillExpression":{"kind":"field_reference","name":"Offense","path":[]},"refSummary":{"fieldUsage":[{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}}]},"expressionType":"scalar","code":"Offense"},{"name":"defense","type":"string","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":6},"end":{"line":85,"character":24}}},"e":{"node":"field","path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}},"drillExpression":{"kind":"field_reference","name":"Defense","path":[]},"refSummary":{"fieldUsage":[{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}}]},"expressionType":"scalar","code":"Defense"},{"name":"is_home_offense","type":"boolean","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":6},"end":{"line":86,"character":38}}},"e":{"node":"field","path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}},"drillExpression":{"kind":"field_reference","name":"IsHomeOffense","path":[]},"refSummary":{"fieldUsage":[{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}}]},"expressionType":"scalar","code":"IsHomeOffense"},{"type":"fieldref","path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}},"drillExpression":{"kind":"field_reference","name":"quarter_label","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_period","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":33}}},"e":{"node":"field","path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}},"drillExpression":{"kind":"field_reference","name":"StartPeriod","path":[]},"refSummary":{"fieldUsage":[{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}}]},"expressionType":"scalar","code":"StartPeriod"},{"name":"start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":6},"end":{"line":91,"character":44}}},"e":{"node":"field","path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}},"drillExpression":{"kind":"field_reference","name":"chart_start_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}}]},"ungroupings":[],"expressionType":"scalar","code":"chart_start_yardline"},{"name":"end_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":40}}},"e":{"node":"field","path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}},"drillExpression":{"kind":"field_reference","name":"chart_end_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}}]},"expressionType":"scalar","code":"chart_end_yardline"},{"name":"return_start_yardline","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":58}}},"e":{"node":"field","path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}},"drillExpression":{"kind":"field_reference","name":"chart_return_start_yardline","path":[]},"refSummary":{"fieldUsage":[{"path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}}]},"expressionType":"scalar","code":"chart_return_start_yardline"},{"type":"fieldref","path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}},"drillExpression":{"kind":"field_reference","name":"start_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"type":"fieldref","path":["end_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}},"drillExpression":{"kind":"field_reference","name":"end_field_position","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}}},{"name":"plays","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":6},"end":{"line":96,"character":20}}},"e":{"node":"field","path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Plays","path":[]},"refSummary":{"fieldUsage":[{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}}]},"expressionType":"scalar","code":"Plays"},{"name":"yards","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":6},"end":{"line":97,"character":20}}},"e":{"node":"field","path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}},"drillExpression":{"kind":"field_reference","name":"Yards","path":[]},"refSummary":{"fieldUsage":[{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}}]},"expressionType":"scalar","code":"Yards"},{"name":"elapsed_seconds","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":6},"end":{"line":98,"character":51}}},"e":{"node":"field","path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}},"drillExpression":{"kind":"field_reference","name":"time_of_possession_seconds","path":[]},"refSummary":{"fieldUsage":[{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}}]},"expressionType":"scalar","code":"time_of_possession_seconds"},{"type":"fieldref","path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}},"drillExpression":{"kind":"field_reference","name":"result_category","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"type":"fieldref","path":["result_abbreviation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}},"drillExpression":{"kind":"field_reference","name":"result_abbreviation","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}}},{"type":"fieldref","path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}},"drillExpression":{"kind":"field_reference","name":"drive_points","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}},"drillExpression":{"kind":"field_reference","name":"defensive_points_scored","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["defensive_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}},"drillExpression":{"kind":"field_reference","name":"defensive_score_type","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}}},{"type":"fieldref","path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}},"drillExpression":{"kind":"field_reference","name":"is_special_teams_touchdown","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}}},{"type":"fieldref","path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}},"drillExpression":{"kind":"field_reference","name":"is_kickoff_return_touchdown","path":[]},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}}},{"type":"fieldref","path":["special_teams_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}},"drillExpression":{"kind":"field_reference","name":"special_teams_score_type","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}}},{"type":"fieldref","path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}},"drillExpression":{"kind":"field_reference","name":"home_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"type":"fieldref","path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}},"drillExpression":{"kind":"field_reference","name":"away_score_after","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"drive_id","type":"number","numberType":"bigint","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":6},"end":{"line":79,"character":20}}}},{"name":"game_id","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":6},"end":{"line":80,"character":23}}}},{"name":"home_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":59}}}}]}}},{"name":"away_team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team of the game this drive was played in.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":59}}}}]}}},{"name":"drive_number","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":6},"end":{"line":83,"character":33}}}},{"name":"offense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":6},"end":{"line":84,"character":24}}}},{"name":"defense","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":6},"end":{"line":85,"character":24}}}},{"name":"is_home_offense","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":6},"end":{"line":86,"character":38}}}},{"name":"quarter_label","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Quarter the drive started in, written out: 1st, 2nd, 3rd, 4th, or OT for any overtime period.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":618,"character":4},"end":{"line":618,"character":105}}}}]}}},{"name":"start_period","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":33}}}},{"name":"start_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":6},"end":{"line":91,"character":44}}}},{"name":"end_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":6},"end":{"line":92,"character":40}}}},{"name":"return_start_yardline","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":6},"end":{"line":93,"character":58}}}},{"name":"start_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive started. 25 means the drive started on the offense's own 25.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":596,"character":4},"end":{"line":596,"character":127}}}}]}}},{"name":"end_field_position","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Yards from the offense's own goal line where the drive ended.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":599,"character":4},"end":{"line":599,"character":73}}}}]}}},{"name":"plays","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":6},"end":{"line":96,"character":20}}}},{"name":"yards","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":6},"end":{"line":97,"character":20}}}},{"name":"elapsed_seconds","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":6},"end":{"line":98,"character":51}}}},{"name":"result_category","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}},"annotations":{"inherits":{"notes":[{"text":"#(index)\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":367,"character":4},"end":{"line":367,"character":13}}}},{"text":"#(doc) How the drive ended, grouped into readable categories: Touchdown, Field goal, Punt, Missed field goal, Interception, Fumble, Turnover on downs, Safety, Defensive touchdown when the defense returned it for a score, End of period, Two-point conversion made and Two-point conversion failed for the alternating attempts from the third overtime on, and Uncategorized.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":368,"character":4},"end":{"line":368,"character":374}}}}]}}},{"name":"result_abbreviation","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Short label for how the drive ended, for drive charts: TD, FG, P for punt, FGA for a missed field goal attempt, Int, Fum, Downs, S for safety, Def TD, Half when the first half ran out, Game End when the game ran out, 2PT for a converted overtime two-point attempt and Miss for one that failed, and Other.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":400,"character":4},"end":{"line":400,"character":316}}}}]}}},{"name":"drive_points","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the offense scored on this drive, taken from the score before and after so that\nextra points and two-point conversions are counted. On the 0.8% of drives where the\nfeed's score columns skip an intervening score and produce a value no single possession\ncan produce (outside 0 to 8), it falls back to the drive's result: 7 for a touchdown,\n3 for a made field goal, 0 otherwise. Without that repair those 325 rows contribute 6%\nof the season's points and inflate every scoring rate.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":510,"character":4},"end":{"line":517,"character":7}}},"indentStripped":6}]}}},{"name":"defensive_points_scored","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nPoints the defense scored on this possession, from return touchdowns, blocked kicks\nreturned, and safeties. Read from the scoreboard rather than the result string, which\nsays how a possession ended and not who scored.\n\nTwo guardrails, both earned the hard way. A defense cannot score 3, so only a move of\n6 to 8 counts as a return touchdown and only 2 as a safety. And a scoreboard move the\nfeed does not corroborate is not believed: of the 231 drives where the defensive column\njumps by a touchdown without the result string saying so, only 122 line up with the next\ndrive's opening score — the rest are the columns lagging, and counting them would invent\nabout a hundred defensive touchdowns.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":545,"character":4},"end":{"line":556,"character":7}}},"indentStripped":6}]}}},{"name":"defensive_score_type","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) How the defense scored, when it did: Punt return or block, Interception return, Fumble return, Blocked kick return, Safety, or Return touchdown when the feed does not say. Empty when the defense did not score.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":569,"character":4},"end":{"line":569,"character":221}}}}]}}},{"name":"is_special_teams_touchdown","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) True when the touchdown came on special teams — a kickoff return, a punt return, or a blocked kick — rather than from the offense or from a takeaway. The scoring team is this row's Defense.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":479,"character":4},"end":{"line":479,"character":201}}}}]}}},{"name":"is_kickoff_return_touchdown","type":"boolean","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}},"annotations":{"inherits":{"notes":[{"text":"#|(doc)\nTrue when this row is really a kickoff return touchdown. The feed files one under the\nKICKING team as a one-play \"drive\" covering nearly the whole field whose own score\nnever moves — Utah Tech at BYU in 2026 opens the second half with \"Utah Tech, 1 play,\n100 yards, TD\", which was BYU running the kickoff back. Read as an ordinary touchdown\nit credits the wrong team, in the wrong direction. The returning team is this row's\nDefense.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":450,"character":4},"end":{"line":457,"character":7}}},"indentStripped":6}]}}},{"name":"special_teams_score_type","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) How a special-teams touchdown was scored: Kickoff return, Punt return, or Blocked kick return. Empty on every other drive.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":483,"character":4},"end":{"line":483,"character":134}}}}]}}},{"name":"home_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Home team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":579,"character":4},"end":{"line":579,"character":140}}}}]}}},{"name":"away_score_after","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Away team's score once the drive was over, with the feed's scoreboard spikes repaired and the running total held non-decreasing.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":586,"character":4},"end":{"line":586,"character":140}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"drive_number"}],"filterList":[],"refSummary":{"fieldUsage":[{"path":["Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":79,"character":18},"end":{"line":79,"character":20}}}},{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":80,"character":17},"end":{"line":80,"character":23}}}},{"path":["home_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":81,"character":6},"end":{"line":81,"character":15}}}},{"path":["away_team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":82,"character":6},"end":{"line":82,"character":15}}}},{"path":["DriveNumber"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":83,"character":22},"end":{"line":83,"character":33}}}},{"path":["Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":84,"character":17},"end":{"line":84,"character":24}}}},{"path":["Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":85,"character":17},"end":{"line":85,"character":24}}}},{"path":["IsHomeOffense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":86,"character":25},"end":{"line":86,"character":38}}}},{"path":["quarter_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":87,"character":6},"end":{"line":87,"character":19}}}},{"path":["StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":88,"character":22},"end":{"line":88,"character":33}}}},{"path":["chart_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":91,"character":24},"end":{"line":91,"character":44}}}},{"path":["chart_end_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":92,"character":22},"end":{"line":92,"character":40}}}},{"path":["chart_return_start_yardline"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":93,"character":31},"end":{"line":93,"character":58}}}},{"path":["start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":94,"character":6},"end":{"line":94,"character":26}}}},{"path":["end_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":95,"character":6},"end":{"line":95,"character":24}}}},{"path":["Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":96,"character":15},"end":{"line":96,"character":20}}}},{"path":["Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":97,"character":15},"end":{"line":97,"character":20}}}},{"path":["time_of_possession_seconds"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":98,"character":25},"end":{"line":98,"character":51}}}},{"path":["result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":99,"character":6},"end":{"line":99,"character":21}}}},{"path":["result_abbreviation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":100,"character":6},"end":{"line":100,"character":25}}}},{"path":["drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":101,"character":6},"end":{"line":101,"character":18}}}},{"path":["defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":102,"character":6},"end":{"line":102,"character":29}}}},{"path":["defensive_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":103,"character":6},"end":{"line":103,"character":26}}}},{"path":["is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":104,"character":6},"end":{"line":104,"character":32}}}},{"path":["is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":105,"character":6},"end":{"line":105,"character":33}}}},{"path":["special_teams_score_type"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":106,"character":6},"end":{"line":106,"character":30}}}},{"path":["home_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":107,"character":6},"end":{"line":107,"character":22}}}},{"path":["away_score_after"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":108,"character":6},"end":{"line":108,"character":22}}}}]}}],"annotations":{"blockNotes":[{"text":"#(doc) Every possession of one game, in order, with the geometry and score ledger a drive chart draws from. Filter it to a single GameId.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":76,"character":2},"end":{"line":76,"character":140}}}}]},"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":77,"character":8},"end":{"line":110,"character":3}}}}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":31,"character":13},"end":{"line":32,"character":98}}},"parameters":{},"as":"team_drives","annotations":{"blockNotes":[{"text":"#(doc) Drives with garbage time left out when the checkbox is on.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":24,"character":0},"end":{"line":24,"character":66}}}}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per drive (possession) of the 2025 and 2026 college football seasons, with the game\nit was played in joined in. Use it for offensive and defensive drive efficiency, Eckel rate,\nfield position, scoring rates, and drive-by-drive game charts.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","range":{"start":{"line":55,"character":0},"end":{"line":59,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#|(doc)\nOne row per drive (a single possession) in the 2025 and 2026 college football seasons, covering\nthe full Division I schedule: every FBS game and every FCS game. Each drive records who had the ball and who was\ndefending, when the possession started and ended on the game clock, where it started and\nended on the field, how many plays and yards it produced, how it ended (touchdown, field\ngoal, punt, interception, fumble, turnover on downs, end of half), and the score for both\nteams before and after. Use it for drive efficiency, scoring rates, field position,\ntime of possession, three-and-outs, and drive-by-drive game charts. Joins to game-level\ninformation on GameId.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":236,"character":0},"end":{"line":245,"character":3}}},"indentStripped":2}],"inherits":{"blockNotes":[{"text":"#(doc) The drive feed with the redundant copies removed. Everything downstream reads this rather than the raw table, so no query has to remember to filter them.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":107,"character":0},"end":{"line":107,"character":161}}}}],"inherits":{"blockNotes":[{"text":"#(doc) Every drive of every season in the feed, one row per possession, exactly as CFBD publishes it.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","range":{"start":{"line":30,"character":0},"end":{"line":30,"character":102}}}}]}}}}},"arguments":{},"filterList":[{"node":"filterCondition","code":"GameId ~ $DRIVE_GAMES and not dedupe.is_redundant_copy","e":{"node":"and","kids":{"left":{"node":"filterMatch","dataType":"number","kids":{"filterExpr":{"node":"given","id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","refName":"DRIVE_GAMES","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},"expr":{"node":"field","path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}}}},"right":{"node":"not","e":{"node":"field","path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}}],"givenUsage":[{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}}]},"isSourceFilter":true},{"node":"filterCondition","code":"$EXCLUDE_GARBAGE = false or not is_garbage_possession","e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"given","id":"given/15:EXCLUDE_GARBAGE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"EXCLUDE_GARBAGE","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":9},"end":{"line":26,"character":25}}}},"right":{"node":"false"}}},"right":{"node":"not","e":{"node":"field","path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":41},"end":{"line":26,"character":62}}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":41},"end":{"line":26,"character":62}}}}],"givenUsage":[{"id":"given/15:EXCLUDE_GARBAGE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":9},"end":{"line":26,"character":25}}}}]},"isSourceFilter":true}],"primaryKey":"Id","sourceID":"ranking_drives@file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","referenceID":"ranking_drives@file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","join":"many","matrixOperation":"left","onExpression":{"node":"and","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":7},"end":{"line":32,"character":14}}}},"right":{"node":"field","path":["team_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":17},"end":{"line":32,"character":35}}}}}},"right":{"node":"()","e":{"node":"or","kids":{"left":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":41},"end":{"line":32,"character":45}}}},"right":{"node":"field","path":["team_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":48},"end":{"line":32,"character":67}}}}}},"right":{"node":"=","kids":{"left":{"node":"field","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":71},"end":{"line":32,"character":75}}}},"right":{"node":"field","path":["team_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":78},"end":{"line":32,"character":97}}}}}}}}}}},"refSummary":{"fieldUsage":[{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":7},"end":{"line":32,"character":14}}}},{"path":["team_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":17},"end":{"line":32,"character":35}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":41},"end":{"line":32,"character":45}}}},{"path":["team_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":48},"end":{"line":32,"character":67}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":71},"end":{"line":32,"character":75}}}},{"path":["team_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":78},"end":{"line":32,"character":97}}}}]}}],"arguments":{},"parameters":{},"connection":"duckdb","primaryKey":"team_game_id","dialect":"duckdb","persistent":false,"extends":"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","sourceID":"ranking_team_games@file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy"},"team_rankings":{"type":"query","structRef":"ranking_team_games","sourceArguments":{},"pipeline":[{"type":"reduce","queryFields":[{"type":"fieldref","path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":8}}},"drillExpression":{"kind":"field_reference","name":"team","path":[]}},{"type":"fieldref","path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":56,"character":4},"end":{"line":56,"character":14}}},"drillExpression":{"kind":"field_reference","name":"conference","path":[]}},{"type":"fieldref","path":["games_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":60,"character":4},"end":{"line":60,"character":16}}},"drillExpression":{"kind":"field_reference","name":"games_played","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of completed games played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":45}}}}]}}},{"type":"fieldref","path":["wins"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":8}}},"drillExpression":{"kind":"field_reference","name":"wins","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":22}}}}]}}},{"type":"fieldref","path":["losses"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":10}}},"drillExpression":{"kind":"field_reference","name":"losses","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Games lost.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":23}}}}]}}},{"type":"fieldref","path":["win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":63,"character":4},"end":{"line":63,"character":12}}},"drillExpression":{"kind":"field_reference","name":"win_rate","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":41}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":14}}}}]}}},{"type":"fieldref","path":["points_per_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":19}}},"drillExpression":{"kind":"field_reference","name":"points_per_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":53}}}}]}}},{"type":"fieldref","path":["points_allowed_per_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":27}}},"drillExpression":{"kind":"field_reference","name":"points_allowed_per_game","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points allowed per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":54}}}}]}}},{"type":"fieldref","path":["avg_scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":66,"character":4},"end":{"line":66,"character":22}}},"drillExpression":{"kind":"field_reference","name":"avg_scoring_margin","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average scoring margin per completed game. Positive means the team outscores its opponents.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":103}}}}]}}},{"name":"offense_drives","type":"number","numberType":"integer","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":4},"end":{"line":69,"character":67}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":22},"end":{"line":69,"character":45}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":55},"end":{"line":69,"character":65}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":55},"end":{"line":69,"character":65}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":22},"end":{"line":69,"character":45}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":55},"end":{"line":69,"character":65}}}}]},"expressionType":"aggregate","code":"team_drives.drive_count { where: on_offense }"},{"name":"offense_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":82}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":32},"end":{"line":70,"character":60}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":70},"end":{"line":70,"character":80}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":70},"end":{"line":70,"character":80}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":32},"end":{"line":70,"character":60}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":70},"end":{"line":70,"character":80}}}}]},"expressionType":"aggregate","code":"team_drives.points_per_drive { where: on_offense }"},{"name":"offense_yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":78}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","yards_per_play"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":30},"end":{"line":71,"character":56}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":66},"end":{"line":71,"character":76}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":66},"end":{"line":71,"character":76}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","yards_per_play"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":30},"end":{"line":71,"character":56}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":66},"end":{"line":71,"character":76}}}}]},"expressionType":"aggregate","code":"team_drives.yards_per_play { where: on_offense }"},{"name":"offense_eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":70}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","eckel_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":26},"end":{"line":72,"character":48}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":58},"end":{"line":72,"character":68}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":58},"end":{"line":72,"character":68}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","eckel_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":26},"end":{"line":72,"character":48}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":58},"end":{"line":72,"character":68}}}}]},"expressionType":"aggregate","code":"team_drives.eckel_rate { where: on_offense }"},{"name":"offense_touchdown_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":78}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":30},"end":{"line":73,"character":56}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":66},"end":{"line":73,"character":76}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":66},"end":{"line":73,"character":76}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":30},"end":{"line":73,"character":56}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":66},"end":{"line":73,"character":76}}}}]},"expressionType":"aggregate","code":"team_drives.touchdown_rate { where: on_offense }"},{"name":"offense_explosive_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":84}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","explosive_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":30},"end":{"line":74,"character":62}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":72},"end":{"line":74,"character":82}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":72},"end":{"line":74,"character":82}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","explosive_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":30},"end":{"line":74,"character":62}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":72},"end":{"line":74,"character":82}}}}]},"expressionType":"aggregate","code":"team_drives.explosive_drive_rate { where: on_offense }"},{"name":"offense_three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":86}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":34},"end":{"line":75,"character":64}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":74},"end":{"line":75,"character":84}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":74},"end":{"line":75,"character":84}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":34},"end":{"line":75,"character":64}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":74},"end":{"line":75,"character":84}}}}]},"expressionType":"aggregate","code":"team_drives.three_and_out_rate { where: on_offense }"},{"name":"offense_turnover_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":76}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":29},"end":{"line":76,"character":54}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":64},"end":{"line":76,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":64},"end":{"line":76,"character":74}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":29},"end":{"line":76,"character":54}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":64},"end":{"line":76,"character":74}}}}]},"expressionType":"aggregate","code":"team_drives.turnover_rate { where: on_offense }"},{"name":"offense_avg_start","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":83}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":25},"end":{"line":77,"character":61}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":71},"end":{"line":77,"character":81}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":71},"end":{"line":77,"character":81}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":25},"end":{"line":77,"character":61}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":71},"end":{"line":77,"character":81}}}}]},"expressionType":"aggregate","code":"team_drives.avg_start_field_position { where: on_offense }"},{"name":"defense_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":82}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":32},"end":{"line":80,"character":60}}}},"filterList":[{"node":"filterCondition","code":"on_defense","e":{"node":"field","path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":70},"end":{"line":80,"character":80}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":70},"end":{"line":80,"character":80}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":32},"end":{"line":80,"character":60}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":70},"end":{"line":80,"character":80}}}}]},"expressionType":"aggregate","code":"team_drives.points_per_drive { where: on_defense }"},{"name":"defense_yards_per_play","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":78}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","yards_per_play"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":30},"end":{"line":81,"character":56}}}},"filterList":[{"node":"filterCondition","code":"on_defense","e":{"node":"field","path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":66},"end":{"line":81,"character":76}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":66},"end":{"line":81,"character":76}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","yards_per_play"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":30},"end":{"line":81,"character":56}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":66},"end":{"line":81,"character":76}}}}]},"expressionType":"aggregate","code":"team_drives.yards_per_play { where: on_defense }"},{"name":"defense_eckel_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":70}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","eckel_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":26},"end":{"line":82,"character":48}}}},"filterList":[{"node":"filterCondition","code":"on_defense","e":{"node":"field","path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":58},"end":{"line":82,"character":68}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":58},"end":{"line":82,"character":68}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","eckel_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":26},"end":{"line":82,"character":48}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":58},"end":{"line":82,"character":68}}}}]},"expressionType":"aggregate","code":"team_drives.eckel_rate { where: on_defense }"},{"name":"defense_three_and_out_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":86}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":34},"end":{"line":83,"character":64}}}},"filterList":[{"node":"filterCondition","code":"on_defense","e":{"node":"field","path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":74},"end":{"line":83,"character":84}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":74},"end":{"line":83,"character":84}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":34},"end":{"line":83,"character":64}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":74},"end":{"line":83,"character":84}}}}]},"expressionType":"aggregate","code":"team_drives.three_and_out_rate { where: on_defense }"},{"name":"defense_takeaway_rate","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":76}}},"e":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":54}}}},"filterList":[{"node":"filterCondition","code":"on_defense","e":{"node":"field","path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":64},"end":{"line":84,"character":74}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":64},"end":{"line":84,"character":74}}}}]},"isSourceFilter":false}]}},"refSummary":{"fieldUsage":[{"path":["team_drives","turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":54}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":64},"end":{"line":84,"character":74}}}}]},"expressionType":"aggregate","code":"team_drives.turnover_rate { where: on_defense }"},{"name":"net_points_per_drive","type":"number","numberType":"float","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":87,"character":4},"end":{"line":89,"character":58}}},"e":{"node":"-","kids":{"left":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":34}}}},"filterList":[{"node":"filterCondition","code":"on_offense","e":{"node":"field","path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":88,"character":44},"end":{"line":88,"character":54}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":88,"character":44},"end":{"line":88,"character":54}}}}]},"isSourceFilter":false}]}},"right":{"node":"filteredExpr","kids":{"e":{"node":"field","path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":89,"character":8},"end":{"line":89,"character":36}}}},"filterList":[{"node":"filterCondition","code":"on_defense","e":{"node":"field","path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":89,"character":46},"end":{"line":89,"character":56}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":89,"character":46},"end":{"line":89,"character":56}}}}]},"isSourceFilter":false}]}}}},"refSummary":{"fieldUsage":[{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":34}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":88,"character":44},"end":{"line":88,"character":54}}}},{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":89,"character":8},"end":{"line":89,"character":36}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":89,"character":46},"end":{"line":89,"character":56}}}}]},"expressionType":"aggregate","code":"team_drives.points_per_drive { where: on_offense }\n      - team_drives.points_per_drive { where: on_defense }"},{"type":"fieldref","path":["current_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":15}}},"drillExpression":{"kind":"field_reference","name":"current_elo","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) The team's Elo rating after its most recent rated game: where the rating stands now. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":141}}}}]}}},{"type":"fieldref","path":["strength_of_schedule"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":91,"character":4},"end":{"line":91,"character":24}}},"drillExpression":{"kind":"field_reference","name":"strength_of_schedule","path":[]},"annotations":{"inherits":{"notes":[{"text":"#(doc) Strength of schedule: the average pregame Elo rating of the opponents played. Higher means a tougher schedule.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":122}}}}]}}}],"outputStruct":{"type":"query_result","name":"query_result","dialect":"duckdb","connection":"duckdb","fields":[{"name":"team","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":8}}}},{"name":"conference","type":"string","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":56,"character":4},"end":{"line":56,"character":14}}}},{"name":"games_played","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":60,"character":4},"end":{"line":60,"character":16}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Number of completed games played.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":45}}}}]}}},{"name":"wins","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":8}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":58,"character":4},"end":{"line":58,"character":22}}}}]}}},{"name":"losses","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":10}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Games lost.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":23}}}}]}}},{"name":"win_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":63,"character":4},"end":{"line":63,"character":12}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Share of completed games won.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":41}}}},{"text":"# percent\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":14}}}}]}}},{"name":"points_per_game","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":19}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points scored per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":68,"character":4},"end":{"line":68,"character":53}}}}]}}},{"name":"points_allowed_per_game","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":27}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average points allowed per completed game.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":54}}}}]}}},{"name":"avg_scoring_margin","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":66,"character":4},"end":{"line":66,"character":22}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Average scoring margin per completed game. Positive means the team outscores its opponents.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":103}}}}]}}},{"name":"offense_drives","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":4},"end":{"line":69,"character":67}}}},{"name":"offense_points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":4},"end":{"line":70,"character":82}}}},{"name":"offense_yards_per_play","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":4},"end":{"line":71,"character":78}}}},{"name":"offense_eckel_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":4},"end":{"line":72,"character":70}}}},{"name":"offense_touchdown_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":4},"end":{"line":73,"character":78}}}},{"name":"offense_explosive_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":4},"end":{"line":74,"character":84}}}},{"name":"offense_three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":4},"end":{"line":75,"character":86}}}},{"name":"offense_turnover_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":4},"end":{"line":76,"character":76}}}},{"name":"offense_avg_start","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":83}}}},{"name":"defense_points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":82}}}},{"name":"defense_yards_per_play","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":4},"end":{"line":81,"character":78}}}},{"name":"defense_eckel_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":4},"end":{"line":82,"character":70}}}},{"name":"defense_three_and_out_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":4},"end":{"line":83,"character":86}}}},{"name":"defense_takeaway_rate","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":4},"end":{"line":84,"character":76}}}},{"name":"net_points_per_drive","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":87,"character":4},"end":{"line":89,"character":58}}}},{"name":"current_elo","type":"number","numberType":"integer","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":15}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) The team's Elo rating after its most recent rated game: where the rating stands now. Higher is stronger; roughly 1500 is average.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":77,"character":4},"end":{"line":77,"character":141}}}}]}}},{"name":"strength_of_schedule","type":"number","numberType":"float","expressionType":"scalar","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":91,"character":4},"end":{"line":91,"character":24}}},"annotations":{"inherits":{"notes":[{"text":"#(doc) Strength of schedule: the average pregame Elo rating of the opponents played. Higher means a tougher schedule.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":80,"character":4},"end":{"line":80,"character":122}}}}]}}}]},"isRepeated":true,"orderBy":[{"field":"net_points_per_drive","dir":"desc"}],"filterList":[{"node":"filterCondition","code":"season_label ~ $SEASON","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"SEASON","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":19},"end":{"line":50,"character":26}}}},"expr":{"node":"field","path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":16}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":16}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":19},"end":{"line":50,"character":26}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"classification ~ $DIVISION","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"DIVISION","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":30}}}},"expr":{"node":"field","path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":18}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":18}}}}],"givenUsage":[{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":30}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"conference ~ $CONFERENCE","e":{"node":"filterMatch","dataType":"string","kids":{"filterExpr":{"node":"given","id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","refName":"CONFERENCE","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":17},"end":{"line":52,"character":28}}}},"expr":{"node":"field","path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":14}}}}}},"expressionType":"scalar","refSummary":{"fieldUsage":[{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":14}}}}],"givenUsage":[{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":17},"end":{"line":52,"character":28}}}}]},"isSourceFilter":false},{"node":"filterCondition","code":"games_played > 0","e":{"node":">","kids":{"left":{"node":"outputField","name":"games_played"},"right":{"node":"numberLiteral","literal":"0"}}},"expressionType":"aggregate","refSummary":{"fieldUsage":[{"path":["games_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":93,"character":10},"end":{"line":93,"character":22}}}}]},"isSourceFilter":false}],"refSummary":{"fieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":16}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":18}}}},{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":14}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":8}}}},{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":56,"character":4},"end":{"line":56,"character":14}}}},{"path":["games_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":60,"character":4},"end":{"line":60,"character":16}}}},{"path":["wins"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":8}}}},{"path":["losses"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":10}}}},{"path":["win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":63,"character":4},"end":{"line":63,"character":12}}}},{"path":["points_per_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":19}}}},{"path":["points_allowed_per_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":27}}}},{"path":["avg_scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":66,"character":4},"end":{"line":66,"character":22}}}},{"path":["team_drives","drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":22},"end":{"line":69,"character":45}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":55},"end":{"line":69,"character":65}}}},{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":32},"end":{"line":70,"character":60}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":70},"end":{"line":70,"character":80}}}},{"path":["team_drives","yards_per_play"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":30},"end":{"line":71,"character":56}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":66},"end":{"line":71,"character":76}}}},{"path":["team_drives","eckel_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":26},"end":{"line":72,"character":48}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":58},"end":{"line":72,"character":68}}}},{"path":["team_drives","touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":30},"end":{"line":73,"character":56}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":66},"end":{"line":73,"character":76}}}},{"path":["team_drives","explosive_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":30},"end":{"line":74,"character":62}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":72},"end":{"line":74,"character":82}}}},{"path":["team_drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":34},"end":{"line":75,"character":64}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":74},"end":{"line":75,"character":84}}}},{"path":["team_drives","turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":29},"end":{"line":76,"character":54}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":64},"end":{"line":76,"character":74}}}},{"path":["team_drives","avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":25},"end":{"line":77,"character":61}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":71},"end":{"line":77,"character":81}}}},{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":32},"end":{"line":80,"character":60}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":70},"end":{"line":80,"character":80}}}},{"path":["team_drives","yards_per_play"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":30},"end":{"line":81,"character":56}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":81,"character":66},"end":{"line":81,"character":76}}}},{"path":["team_drives","eckel_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":26},"end":{"line":82,"character":48}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":82,"character":58},"end":{"line":82,"character":68}}}},{"path":["team_drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":34},"end":{"line":83,"character":64}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":83,"character":74},"end":{"line":83,"character":84}}}},{"path":["team_drives","turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":29},"end":{"line":84,"character":54}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":84,"character":64},"end":{"line":84,"character":74}}}},{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":88,"character":6},"end":{"line":88,"character":34}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":88,"character":44},"end":{"line":88,"character":54}}}},{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":89,"character":8},"end":{"line":89,"character":36}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":89,"character":46},"end":{"line":89,"character":56}}}},{"path":["current_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":15}}}},{"path":["strength_of_schedule"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":91,"character":4},"end":{"line":91,"character":24}}}},{"path":["games_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":93,"character":10},"end":{"line":93,"character":22}}}}],"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":19},"end":{"line":50,"character":26}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":30}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":17},"end":{"line":52,"character":28}}}}]},"expandedFieldUsage":[{"path":["season_label"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":4},"end":{"line":50,"character":16}}}},{"path":["classification"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":4},"end":{"line":51,"character":18}}}},{"path":["conference"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":4},"end":{"line":52,"character":14}}}},{"path":["team"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":55,"character":4},"end":{"line":55,"character":8}}}},{"path":["games_played"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":60,"character":4},"end":{"line":60,"character":16}}}},{"path":["wins"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":61,"character":4},"end":{"line":61,"character":8}}}},{"path":["losses"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":62,"character":4},"end":{"line":62,"character":10}}}},{"path":["win_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":63,"character":4},"end":{"line":63,"character":12}}}},{"path":["points_per_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":64,"character":4},"end":{"line":64,"character":19}}}},{"path":["points_allowed_per_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":65,"character":4},"end":{"line":65,"character":27}}}},{"path":["avg_scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":66,"character":4},"end":{"line":66,"character":22}}}},{"path":["team_drives","drive_count"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":22},"end":{"line":69,"character":45}}}},{"path":["on_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":69,"character":55},"end":{"line":69,"character":65}}}},{"path":["team_drives","points_per_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":70,"character":32},"end":{"line":70,"character":60}}}},{"path":["team_drives","yards_per_play"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":71,"character":30},"end":{"line":71,"character":56}}}},{"path":["team_drives","eckel_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":72,"character":26},"end":{"line":72,"character":48}}}},{"path":["team_drives","touchdown_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":73,"character":30},"end":{"line":73,"character":56}}}},{"path":["team_drives","explosive_drive_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":74,"character":30},"end":{"line":74,"character":62}}}},{"path":["team_drives","three_and_out_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":75,"character":34},"end":{"line":75,"character":64}}}},{"path":["team_drives","turnover_rate"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":76,"character":29},"end":{"line":76,"character":54}}}},{"path":["team_drives","avg_start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":77,"character":25},"end":{"line":77,"character":61}}}},{"path":["on_defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":80,"character":70},"end":{"line":80,"character":80}}}},{"path":["current_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":90,"character":4},"end":{"line":90,"character":15}}}},{"path":["strength_of_schedule"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":91,"character":4},"end":{"line":91,"character":24}}}},{"path":["season"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":37,"character":20},"end":{"line":37,"character":26}}}},{"path":[],"uniqueKeyRequirement":{"isCount":true}},{"path":["completed"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":56,"character":37},"end":{"line":56,"character":46}}}},{"path":["is_win"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":59,"character":29},"end":{"line":59,"character":35}}}},{"path":["is_loss"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":62,"character":31},"end":{"line":62,"character":38}}}},{"path":["points_for"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":69,"character":27},"end":{"line":69,"character":37}}}},{"path":["points_against"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":72,"character":35},"end":{"line":72,"character":49}}}},{"path":["scoring_margin"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":75,"character":30},"end":{"line":75,"character":44}}}},{"path":["team_drives"],"uniqueKeyRequirement":{"isCount":true}},{"path":["team_drives","GameId"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":9},"end":{"line":112,"character":15}}}},{"path":["team_drives","dedupe","is_redundant_copy"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":39},"end":{"line":112,"character":63}}}},{"path":["team_drives","is_garbage_possession"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":41},"end":{"line":26,"character":62}}}},{"path":["game_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":7},"end":{"line":32,"character":14}}}},{"path":["team_drives","Offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":48},"end":{"line":32,"character":67}}}},{"path":["team_drives","Defense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":32,"character":78},"end":{"line":32,"character":97}}}},{"path":["team_drives","drive_points"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":839,"character":28},"end":{"line":839,"character":40}}}},{"path":["team_drives","Yards"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":26},"end":{"line":848,"character":31}}}},{"path":["team_drives","Plays"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":848,"character":46},"end":{"line":848,"character":51}}}},{"path":["team_drives","is_eckel_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":884,"character":35},"end":{"line":884,"character":49}}}},{"path":["team_drives","is_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":856,"character":39},"end":{"line":856,"character":51}}}},{"path":["team_drives","is_explosive_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":880,"character":45},"end":{"line":880,"character":63}}}},{"path":["team_drives","is_three_and_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":872,"character":43},"end":{"line":872,"character":59}}}},{"path":["team_drives","is_turnover"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":868,"character":38},"end":{"line":868,"character":49}}}},{"path":["team_drives","start_field_position"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":899,"character":36},"end":{"line":899,"character":56}}}},{"path":["postgame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":23},"end":{"line":78,"character":35}}}},{"path":["is_latest_rated_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":78,"character":46},"end":{"line":78,"character":66}}}},{"path":["opponent_pregame_elo"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy","range":{"start":{"line":81,"character":32},"end":{"line":81,"character":52}}}},{"path":["team_drives","dedupe","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":25},"end":{"line":104,"character":33}}}},{"path":["team_drives","dedupe","copy_rank"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":104,"character":42},"end":{"line":104,"character":51}}}},{"path":["team_drives","Id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":109,"character":46},"end":{"line":109,"character":48}}}},{"path":["team_drives","is_garbage_end_of_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":803,"character":7},"end":{"line":803,"character":29}}}},{"path":["team_drives","is_garbage_out_of_reach"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":804,"character":11},"end":{"line":804,"character":34}}}},{"path":["team_drives","is_garbage_trailing_kneel"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":805,"character":11},"end":{"line":805,"character":36}}}},{"path":["team_drives","is_garbage_victory_formation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":806,"character":11},"end":{"line":806,"character":39}}}},{"path":["team_drives","EndOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":11},"end":{"line":519,"character":26}}}},{"path":["team_drives","StartOffenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":519,"character":29},"end":{"line":519,"character":46}}}},{"path":["team_drives","DriveResult"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":521,"character":18},"end":{"line":521,"character":29}}}},{"path":["team_drives","EndYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":505,"character":39},"end":{"line":505,"character":53}}}},{"path":["team_drives","result_category"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":423,"character":20},"end":{"line":423,"character":35}}}},{"path":["team_drives","StartYardsToGoal"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":597,"character":34},"end":{"line":597,"character":50}}}},{"path":["team_drives","clock_ran_out"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":777,"character":21},"end":{"line":777,"character":34}}}},{"path":["team_drives","ends_first_half"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":11},"end":{"line":778,"character":26}}}},{"path":["team_drives","ends_regulation"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":31},"end":{"line":778,"character":46}}}},{"path":["team_drives","margin_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":778,"character":51},"end":{"line":778,"character":72}}}},{"path":["team_drives","StartPeriod"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":782,"character":6},"end":{"line":782,"character":17}}}},{"path":["team_drives","losing_team_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":14},"end":{"line":784,"character":42}}}},{"path":["team_drives","deficit_at_drive_start"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":784,"character":49},"end":{"line":784,"character":71}}}},{"path":["team_drives","ends_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":788,"character":21},"end":{"line":788,"character":30}}}},{"path":["team_drives","is_overtime_conversion"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":44},"end":{"line":381,"character":66}}}},{"path":["team_drives","Scoring"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":381,"character":71},"end":{"line":381,"character":78}}}},{"path":["team_drives","is_special_teams_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":386,"character":42},"end":{"line":386,"character":68}}}},{"path":["team_drives","defensive_points_scored"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":387,"character":38},"end":{"line":387,"character":61}}}},{"path":["team_drives","is_turnover_on_downs"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":770,"character":14},"end":{"line":770,"character":34}}}},{"path":["team_drives","is_field_goal_attempt"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":771,"character":14},"end":{"line":771,"character":35}}}},{"path":["team_drives","EndDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":10},"end":{"line":773,"character":25}}}},{"path":["team_drives","StartDefenseScore"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":773,"character":28},"end":{"line":773,"character":45}}}},{"path":["team_drives","possessions","period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":23},"end":{"line":762,"character":47}}}},{"path":["team_drives","possessions","drives_left_in_period_group"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":762,"character":56},"end":{"line":762,"character":95}}}},{"path":["team_drives","possessions","offense_possessions_left"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":754,"character":11},"end":{"line":754,"character":47}}}},{"path":["team_drives","possessions","drives_left_in_game"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":755,"character":11},"end":{"line":755,"character":42}}}},{"path":["team_drives","is_kickoff_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":6},"end":{"line":481,"character":33}}}},{"path":["team_drives","is_punt_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":37},"end":{"line":481,"character":61}}}},{"path":["team_drives","is_blocked_kick_return_touchdown"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":481,"character":65},"end":{"line":481,"character":97}}}},{"path":["team_drives","is_named_defensive_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":14},"end":{"line":561,"character":38}}}},{"path":["team_drives","scoreboard_agrees_with_next_drive"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":561,"character":42},"end":{"line":561,"character":75}}}},{"path":["team_drives","possessions","drive_id"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":344,"character":60},"end":{"line":344,"character":80}}}},{"path":["team_drives","possessions","next_offense"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":537,"character":6},"end":{"line":537,"character":30}}}},{"path":["team_drives","possessions","next_start_defense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":539,"character":32},"end":{"line":539,"character":68}}}},{"path":["team_drives","possessions","next_start_offense_score"],"at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":540,"character":32},"end":{"line":540,"character":68}}}}],"expandedGivenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":19},"end":{"line":50,"character":26}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":30}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":17},"end":{"line":52,"character":28}}}},{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},{"id":"given/15:EXCLUDE_GARBAGE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":9},"end":{"line":26,"character":25}}}}],"activeJoins":[{"path":["team_drives","dedupe"]},{"path":["team_drives"]},{"path":["team_drives","possessions"]}],"expandedUngroupings":[]}],"location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":48,"character":7},"end":{"line":95,"character":1}}},"name":"team_rankings","annotations":{"blockNotes":[{"text":"#\" Every team ranked on record, scoring and drive efficiency on both sides of the ball. Click a column header to re-rank.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":46,"character":0},"end":{"line":46,"character":122}}}},{"text":"# artifact { title=\"Team Rankings\" }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":47,"character":0},"end":{"line":47,"character":37}}}}]},"givenUsage":[{"id":"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":50,"character":19},"end":{"line":50,"character":26}}}},{"id":"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":51,"character":21},"end":{"line":51,"character":30}}}},{"id":"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":52,"character":17},"end":{"line":52,"character":28}}}},{"id":"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":112,"character":18},"end":{"line":112,"character":30}}}},{"id":"given/15:EXCLUDE_GARBAGE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":26,"character":9},"end":{"line":26,"character":25}}}}],"as":"team_rankings"}},"sourceRegistry":{"team_games@file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"entry":{"type":"source_registry_reference","name":"team_games"}},"games@file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"entry":{"type":"source_registry_reference","name":"games"}},"drives@file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"entry":{"type":"source_registry_reference","name":"drives"}},"ranking_drives@file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy":{"entry":{"type":"source_registry_reference","name":"ranking_drives"}},"ranking_team_games@file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy":{"entry":{"type":"source_registry_reference","name":"ranking_team_games"}}},"modelAnnotations":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{"ownNotes":{},"inheritsFrom":[]},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"ownNotes":{"notes":[{"text":"##! experimental.access_modifiers\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/games.malloy","range":{"start":{"line":0,"character":0},"end":{"line":0,"character":34}}}}]},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/raw.malloy"]},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{"ownNotes":{"notes":[{"text":"##! experimental { givens }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","range":{"start":{"line":0,"character":0},"end":{"line":0,"character":28}}}}]},"inheritsFrom":[]},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"ownNotes":{"notes":[{"text":"##! experimental.access_modifiers\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":0,"character":0},"end":{"line":0,"character":34}}}},{"text":"##! experimental { givens }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","range":{"start":{"line":1,"character":0},"end":{"line":1,"character":28}}}}]},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy"]},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"ownNotes":{},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","file:///Users/timolsen/cfb-data/cfb-games/drives.malloy"]},"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"ownNotes":{},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/raw.malloy","file:///Users/timolsen/cfb-data/cfb-games/games.malloy","file:///Users/timolsen/cfb-data/cfb-games/drives.malloy","file:///Users/timolsen/cfb-data/cfb-games/teams.malloy"]},"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"ownNotes":{"notes":[{"text":"##! experimental { givens }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":0,"character":0},"end":{"line":0,"character":28}}}}]},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/index.malloy"]},"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy":{"ownNotes":{"notes":[{"text":"##! experimental { givens }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","range":{"start":{"line":0,"character":0},"end":{"line":0,"character":28}}}}]},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/index.malloy","file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy"]},"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy":{"ownNotes":{"notes":[{"text":"##! experimental { givens }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","range":{"start":{"line":0,"character":0},"end":{"line":0,"character":28}}}}]},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/index.malloy","file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy"]},"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy":{"ownNotes":{"notes":[{"text":"##! experimental { givens }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","range":{"start":{"line":0,"character":0},"end":{"line":0,"character":28}}}}]},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/index.malloy","file:///Users/timolsen/cfb-data/cfb-games/givens.malloy"]},"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy":{"ownNotes":{"notes":[{"text":"##! experimental { givens }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy","range":{"start":{"line":0,"character":0},"end":{"line":0,"character":28}}}}]},"inheritsFrom":["file:///Users/timolsen/cfb-data/cfb-games/index.malloy","file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy"]}},"queryList":[],"dependencies":{"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}}}},"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}}}}},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}}}},"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}}}}},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}}}},"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}}}}},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}}}},"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/index.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/games.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}},"file:///Users/timolsen/cfb-data/cfb-games/teams.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drives.malloy":{"file:///Users/timolsen/cfb-data/cfb-games/raw.malloy":{},"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{}}}}}}},"givens":{"given/11:DRIVE_GAMES,60:file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy":{"name":"DRIVE_GAMES","type":{"type":"filter expression","filterType":"number"},"default":{"node":"filterLiteral","filterSrc":""},"defaultText":"f''","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","range":{"start":{"line":21,"character":2},"end":{"line":23,"character":38}}},"annotations":{"notes":[{"text":"#(doc) Game ids to restrict the drive data to before the season-wide passes run, for example 401752677, 401754512. Empty (the default) means every game. Set by the games reports when they fetch drive charts; not a reader-facing control.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","range":{"start":{"line":21,"character":2},"end":{"line":21,"character":239}}}},{"text":"# label=\"Drive chart games\"\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","range":{"start":{"line":22,"character":2},"end":{"line":22,"character":30}}}}]}},"given/6:SEASON,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"name":"SEASON","type":{"type":"filter expression","filterType":"string"},"default":{"node":"filterLiteral","filterSrc":"2026"},"defaultText":"f'2026'","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":17,"character":2},"end":{"line":21,"character":37}}},"annotations":{"notes":[{"text":"#(doc) Season to show. The games reports pin their own season; the team rankings let the reader switch.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":17,"character":2},"end":{"line":17,"character":106}}}},{"text":"# label=\"Season\"\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":18,"character":2},"end":{"line":18,"character":19}}}},{"text":"# control=select\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":19,"character":2},"end":{"line":19,"character":19}}}},{"text":"# suggest { query=season_suggest dimension=season_label }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":20,"character":2},"end":{"line":20,"character":60}}}}]}},"given/8:DIVISION,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"name":"DIVISION","type":{"type":"filter expression","filterType":"string"},"default":{"node":"filterLiteral","filterSrc":"fbs"},"defaultText":"f'fbs'","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":23,"character":2},"end":{"line":27,"character":38}}},"annotations":{"notes":[{"text":"#(doc) Division to include: fbs, fcs, ii or iii. A game is included when either team plays in it. Empty shows every division.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":23,"character":2},"end":{"line":23,"character":128}}}},{"text":"# label=\"Division\"\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":24,"character":2},"end":{"line":24,"character":21}}}},{"text":"# control=select\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":25,"character":2},"end":{"line":25,"character":19}}}},{"text":"# suggest { query=division_suggest dimension=classification }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":26,"character":2},"end":{"line":26,"character":64}}}}]}},"given/10:CONFERENCE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"name":"CONFERENCE","type":{"type":"filter expression","filterType":"string"},"default":{"node":"filterLiteral","filterSrc":""},"defaultText":"f''","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":29,"character":2},"end":{"line":33,"character":37}}},"annotations":{"notes":[{"text":"#(doc) Conference to include. A game is included when either team belongs to it. Empty shows every conference.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":29,"character":2},"end":{"line":29,"character":113}}}},{"text":"# label=\"Conference\"\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":30,"character":2},"end":{"line":30,"character":23}}}},{"text":"# control=select\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":31,"character":2},"end":{"line":31,"character":19}}}},{"text":"# suggest { query=conference_suggest dimension=conference }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":32,"character":2},"end":{"line":32,"character":62}}}}]}},"given/4:TEAM,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"name":"TEAM","type":{"type":"filter expression","filterType":"string"},"default":{"node":"filterLiteral","filterSrc":""},"defaultText":"f''","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":35,"character":2},"end":{"line":39,"character":31}}},"annotations":{"notes":[{"text":"#(doc) One team whose games to show. Empty shows every team. Narrows to the chosen conference when one is picked.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":35,"character":2},"end":{"line":35,"character":116}}}},{"text":"# label=\"Team\"\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":36,"character":2},"end":{"line":36,"character":17}}}},{"text":"# control=select\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":37,"character":2},"end":{"line":37,"character":19}}}},{"text":"# suggest { query=team_suggest dimension=team }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":38,"character":2},"end":{"line":38,"character":50}}}}]}},"given/9:GAME_WEEK,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"name":"GAME_WEEK","type":{"type":"filter expression","filterType":"string"},"default":{"node":"filterLiteral","filterSrc":""},"defaultText":"f''","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":41,"character":2},"end":{"line":45,"character":36}}},"annotations":{"notes":[{"text":"#(doc) Week of the season to show: Week 1 through Week 16, or Postseason. Empty shows the whole season.\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":41,"character":2},"end":{"line":41,"character":106}}}},{"text":"# label=\"Week\"\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":42,"character":2},"end":{"line":42,"character":17}}}},{"text":"# control=select\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":43,"character":2},"end":{"line":43,"character":19}}}},{"text":"# suggest { query=week_suggest dimension=week_label }\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":44,"character":2},"end":{"line":44,"character":56}}}}]}},"given/15:EXCLUDE_GARBAGE,55:file:///Users/timolsen/cfb-data/cfb-games/givens.malloy":{"name":"EXCLUDE_GARBAGE","type":{"type":"boolean"},"default":{"node":"true"},"defaultText":"true","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":47,"character":2},"end":{"line":53,"character":36}}},"annotations":{"notes":[{"text":"#|(doc)\nLeave out garbage-time possessions — the ones neither team is still playing to win —\nfrom the drive-efficiency columns. Uses BCFtoys' garbage-possession rules. Records and\npoints per game always count every game.","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":47,"character":2},"end":{"line":51,"character":5}}},"indentStripped":4},{"text":"# label=\"Hide garbage drives\"\n","at":{"url":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","range":{"start":{"line":52,"character":2},"end":{"line":52,"character":32}}}}]}}},"references":[],"imports":[{"importURL":"file:///Users/timolsen/cfb-data/cfb-games/index.malloy","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy","range":{"start":{"line":1,"character":7},"end":{"line":1,"character":21}}}},{"importURL":"file:///Users/timolsen/cfb-data/cfb-games/givens.malloy","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy","range":{"start":{"line":2,"character":7},"end":{"line":2,"character":22}}}},{"importURL":"file:///Users/timolsen/cfb-data/cfb-games/drive-games.malloy","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy","range":{"start":{"line":3,"character":7},"end":{"line":3,"character":27}}}},{"importURL":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2025.malloy","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy","range":{"start":{"line":4,"character":7},"end":{"line":4,"character":37}}}},{"importURL":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/games-2026.malloy","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy","range":{"start":{"line":5,"character":7},"end":{"line":5,"character":37}}}},{"importURL":"file:///Users/timolsen/cfb-data/cfb-games/dashboards/team-rankings.malloy","location":{"url":"file:///Users/timolsen/cfb-data/cfb-games/__site_model__.malloy","range":{"start":{"line":6,"character":7},"end":{"line":6,"character":40}}}}]}